爬⾍——Python123.io付费和限免课(1)
Get your hands dirty
⼀、⼊门案例 1
理解⽹页结构:
<p> <div> <h1> 的结构是 HTML 语义标签
class 和 style 中是控制样式的 CSS 代码 e.g.<div >
按钮中的 onclick,是与⽤户交互的 Javascript 代码 e.g. <button class="button is-primary" onclick="alert('你好')">点这⾥</button>
查看⽹页代码:
⿏标移动到在当前页⾯的任意内容上,点击「检查」(或者「检查元素」「审查元素」「查看元素」)按钮,在新弹出的窗⼝中就能够看到这段内容对应的代码。
使⽤ Python 下载⽹页代码:
python --version (3.6以上)
pip install requests_html
提取⽹页中所需内容:
css选择器:
先查看⼀段内容的代码,在代码上点击右键,选择 Copy -> Copy Selector (或者 Copy CSS Selector、复制 CSS 选择器),就能将这段内容对应的 CSS 选择器复制到剪贴板。
下载requests_html库:
⽤镜像他不⾹吗?
前:Timeout error 20kb速度
后:飞起
Q: 提取电影名称
新建carwler.py⽂件
----------------------------
from requests_html import HTMLSession
session=HTMLSession()
(''movie.douban/subject/1292052/'')
)
title=r.html.find(' #content > h1 > span:nth-child(1) ',first=True)
)
-----------------------------------
-----------------------------------------------
失败了吗?如果你进⾏了额外的练习,会发现很多内容⽆法正确提取出来。
需要记住的是,CSS 选择器只是多种内容提取⽅法中的⼀种,
没有⼀种⽅法能够解决所有问题,
编写⼀个真实的爬⾍,还需要使⽤更多⼯具 + 你的智慧。
⼆、案例 2 多⽹——⾃动化
链接相似的⽹页通常具有相似的外观。
外观相似的⽹页通常具有相似的⽹页结构。
这两个相似性是爬⾍能够从⼀系列⽹站中⾃动化提取数据的重要基础。
逻辑:下载⽹页 - ⽹站服务器 - 提取信息
Q:多个电影名称和⽇期
-----------------------------------------------------------
from requests_html import HTMLSession
session=HTMLSession()
links=['movie.douban/subject/1292052/',\
'movie.douban/subject/1291546/', \
'movie.douban/subject/1292720/',\
'movie.douban/subject/1295644/']
for link in links:
(link)
title=r.html.find(' #content > h1 > span:nth-child(1) ',first=True)
year = r.html.find('#content > h1 > ar',first=True)
,)
--------------------------------------------------------------------------
Q:新浪微博股票⽇值
No connection adapters were found.
事实上,很多⽹站使⽤ Javascript 代码来⽣成⽹页内容,你的爬⾍需要正确解析 Javascript 才能获得你所看到的页⾯。-----------------------------------
解决:添加渲染器
(link).render()
----------------------------------------------------------------------
获取:第⼀次需要下载chromium
1.SSL报错 -- 不知道怎么解决:Max retries exceeded with url: /chromium-browser-snapshots/Win/575458/chrome-win3
2.zip
2.⼿动下载
路径:
试⽤2次:
PageError: Protocol Error: Connectoin Closed. Most likely the page has been closed.
解决:把360给关了。
打印的是全⽂,还没有提取,所以检查元素那步没必要
python怎么读csv数据三、写⼊⽂档
CSV 格式
Python 提供了标准库 csv 来读写 csv 数据。
通常⽤来存储简单的数据,表格类型数据⾸选。
CSV 数据可以使⽤微软 Office Excel 软件打开。⾮常多的爬⾍数据集都使⽤ CSV 作为存储格式。
----------------------------------------------------------------
from requests_html import HTMLSession
import csv
session = HTMLSession()
#打开⽂件,写标题
file = open('movies.csv', 'w', newline='')
csvwriter = csv.writer(file)
csvwriter.writerow(['名称', '年份'])
#写内容
links = ['movie.douban/subject/1292052/', 'movie.douban/subject/26752088/',
'movie.douban/subject/1962665/']
for link in links:
r = (link)
title = r.html.find('#content > h1 > span:nth-child(1)', first=True)
year = r.html.find('#content > h1 > ar', first=True)
csvwriter.writerow([, ]) #TypeError: writerow() takes exactly one argument (2 given) 变成列表就是⼀个参数#关
file.close()
----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------
写新浪股票⽇值呢??
全打印出来了??还打印成这样render()没办法解析我的需求
如果是整个获取再分析,为什么不⽤r+b??
--------------------------------------------------------------
⽤bs4+requests+re:
了canvas标签但没有children也不知道内容是什么
不会
。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论