爬虫——Python123.io付费和限免课(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

爬⾍——Python123.io付费和限免课(1)
Get your hands dirty
⼀、⼊门案例 1
理解⽹页结构:
<p> <div> <h1> 的结构是 HTML 语义标签
class 和 style 中是控制样式的 CSS 代码 e.g.<div style="color: red">
按钮中的 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()
r=session.get(''https:///subject/1292052/'')
print(r.text)
title=r.html.find(' #content > h1 > span:nth-child(1) ',first=True)
print(title.text)
-----------------------------------
-----------------------------------------------
失败了吗?如果你进⾏了额外的练习,会发现很多内容⽆法正确提取出来。

需要记住的是,CSS 选择器只是多种内容提取⽅法中的⼀种,
没有⼀种⽅法能够解决所有问题,
编写⼀个真实的爬⾍,还需要使⽤更多⼯具 + 你的智慧。

⼆、案例 2 多⽹——⾃动化
链接相似的⽹页通常具有相似的外观。

外观相似的⽹页通常具有相似的⽹页结构。

这两个相似性是爬⾍能够从⼀系列⽹站中⾃动化提取数据的重要基础。

逻辑:下载⽹页 - ⽹站服务器 - 提取信息
Q:多个电影名称和⽇期
-----------------------------------------------------------
from requests_html import HTMLSession
session=HTMLSession()
links=['https:///subject/1292052/',\
'https:///subject/1291546/', \
'https:///subject/1292720/',\
'https:///subject/1295644/']
for link in links:
r=session.get(link)
title=r.html.find(' #content > h1 > span:nth-child(1) ',first=True)
year = r.html.find('#content > h1 > span.year',first=True)
print(title.text,year.text)
--------------------------------------------------------------------------
Q:新浪微博股票⽇值
No connection adapters were found.
事实上,很多⽹站使⽤ Javascript 代码来⽣成⽹页内容,你的爬⾍需要正确解析 Javascript 才能获得你所看到的页⾯。

-----------------------------------
解决:添加渲染器
r=session.get(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给关了。

打印的是全⽂,还没有提取,所以检查元素那步没必要
三、写⼊⽂档
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 = ['https:///subject/1292052/', 'https:///subject/26752088/',
'https:///subject/1962665/']
for link in links:
r = session.get(link)
title = r.html.find('#content > h1 > span:nth-child(1)', first=True)
year = r.html.find('#content > h1 > span.year', first=True)
csvwriter.writerow([title.text, year.text]) #TypeError: writerow() takes exactly one argument (2 given) 变成列表就是⼀个参数#关
file.close()
----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------
写新浪股票⽇值呢??
全打印出来了??还打印成这样render()没办法解析我的需求
如果是整个获取再分析,为什么不⽤r+b??
--------------------------------------------------------------
⽤bs4+requests+re:
找了canvas标签但没有children也不知道内容是什么
不会。

相关文档
最新文档