《python3网络爬虫开发实战》--基本库的使用

1. urllib:

  1. request:它是最基本的 HTTP 请求模块,可以用来模拟发送请求 。 就像在浏览器里输入网挝 然后回车一样,只需要给库方法传入 URL 以及额外的参数,就可以模拟实现这个过程了 。
  2. error:
  3. parse:一个工具模块,提供了许多 URL处理方法,比如拆分、解析 、 合并等。
  4. robotparser:主要是用来识别网站的 robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得 比较少 。

2. Handle类:

当需要实现高级的功能时,使用Handle

 1 import http.cookiejar,urllib.request
 2
 3 filename = ‘cookies.txt‘
 4 #cookie = http.cookiejar.CookieJar
 5 #cookie = http.cookiejar.MozillaCookieJar(filename)
 6 cookie = http.cookiejar.LWPCookieJar(filename)
 7 cookie.load(‘cookies.txt‘, ignore_discard=True, ignore_expires=True)
 8 handle = urllib.request.HTTPCookieProcessor(cookie)
 9 opener = urllib.request.build_opener(handle)
10 response = opener.open(‘http://www.baidu.com‘)
11 #for item in cookie:
12    # print(item.name+"="+item.value)
13
14 #cookie.save(ignore_discard=True, ignore_expires=True)
15 print(response.read().decode(‘utf-8‘))

3. urljoin

我们可以提供一个 base_url (基础链接 )作为第一个参数,将新的链接作为第二个参数,该方法会分析 base_url 的 scheme、 netloc 和 path这 3个内容并对新链接缺失的部分进行补充,最后返回结果 。

4. urlencode()

1 from urllib.parse import urlencode
2
3 params = {
4     ‘name‘: ‘germey‘,
5     ‘age‘: ‘23‘
6 }
7 base_url = ‘http://www.baidu.com?‘
8 url = base_url+urlencode(params)
9 print(url)

5.parse_qs

反序列化,将get请求的参数,转回字典

1 from urllib.parse import parse_qs
2 query= ‘name=germey&age=22‘
3 print(parse_qs(query))

parse_qsl:转化为元组组成的列表

1 from urllib.parse import parse_qsl
2 print(parse_qsl(query))

6. quote

将内容转化为URL编码模式

7.分析Robots协议

1. robots协议

Robots 协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准( Robots ExclusionProtocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。它通常是一个叫作 robots.txt的文本文件,一般放在网站的根目录下 。

2. robotparser

set_url:用来设置 robots.txt 文件的链接。 如果在创建 RobotFileParser 对象时传入了链接,那么就不需要再使用这个方法设置了

read:读取 robots.txt 文件并进行分析。 注意,这个方法执行一个读取和分析操作,如果不 调用这个方法 , 接下来的判断都会为 False,所以一定记得调用这个方法。 这个方法不会返回任何内容,但是执行了读取操作 。

parse:用来解析robots.txt文件,传人的参数是robots.txt某些行的内容,它会按照robots.txt的语法规则来分析这些内容 。

can_fetch:该方法传人两个参数 , 第一个是 User-agent,第二个是要抓取的 URL。 返回的 内容是该搜索引擎是否可以抓取这个 URL,返回结果是 True 或 Falsea

mtime:返回的是上次抓取和分析 robots.txt的时间,这对于长时间分析和抓取的搜索爬虫是 很有必要的,你可能需要定期检查来抓取最新的 robots.txt。

modified:

1 from urllib.robotparser import RobotFileParser
2
3 rp = RobotFileParser()
4 rp.set_url(‘http://www.jianshu.com/robots.txt‘)
5 rp.read()
6 print(rp.can_fetch(‘*‘, ‘http://www.jianshu.com/p/b67554025d7d‘))
7 print(rp.can_fetch(‘*‘, ‘http://www.jianshu.com/search?q=python&page=l&type=collections‘))

8. requests

它同样对长时间分析和抓取 的搜索爬虫很有帮助,将 当前时间设置为上次抓取和分析 robots.txt 的时间 。

1. get:

 1 import requests
 2 import re
 3
 4 #浏览器标时,如果没有,会禁止爬取
 5 headers = {
 6     ‘User-Agent‘:‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘
 7 }
 8 r = requests.get("http://www.zhihu.com/explore",headers=headers)
 9 pattern = re.compile(‘explore-feed.*?question.*?>(.*?)</a>‘,re.S)
10 titles = re.findall(pattern, r.text)
11 print(titles)
12
13 r = requests.get("http://github.com/favicon.ico")
14 with open(‘favicon.ico‘,‘wb‘) as f:
15     f.write(r.content)

2. post:

 1 import requests
 2
 3 data = {
 4     ‘name‘: ‘name‘,
 5     ‘age‘: ‘22‘
 6 }
 7 r = requests.post("http://httpbin.org/post", data=data)
 8 print(r.text)
 9 r = requests.get(‘http://www.zhihu.com‘)
10 print(type(r.status_code), r.status_code)#得到状态码
11 print(type(r.headers), r.headers)#得到响应头
12 print(type(r.cookies), r.cookies)#得到cookies
13 print(type(r.url), r.url)#得到URL
14 print(type(r.history), r.history)#得到请求历史

9. request的高级语法:

1.文件上传:

2. cookies:

 1 import requests
 2
 3 files = {‘file‘:open(‘favicon.ico‘, ‘rb‘)}
 4 r = requests.post("http://httpbin.org/post", files=files)
 5 print(r.text)
 6 r = requests.get("http://www.baidu.com")
 7 print(r.cookies)
 8 for key, value in r.cookies.items():
 9     print(key + ‘=‘ + value)
10
11 headers = {
12     ‘Cookies‘: ‘tst=r; __utma=51854390.2112264675.1539419567.1539419567.1539433913.2; __utmb=51854390.0.10.1539433913; __utmc=51854390; __utmv=51854390.100--|2=registration_date=20160218=1^3=entry_date=20160218=1; __utmz=51854390.1539433913.2.2.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/; tgw_l7_route=e0a07617c1a38385364125951b19eef8; q_c1=d3c7341e344d460ead79171d4fd56f6f|1539419563000|1516290905000; _xsrf=713s0UsLfr6m5Weplwb4offGhSqnugCy; z_c0="2|1:0|10:1533128251|4:z_c0|92:Mi4xS2VDaEFnQUFBQUFBZ09DVGo1ZUtEU1lBQUFCZ0FsVk5PX3hPWEFEVXNtMXhSbmhjbG5NSjlHQU9naEpLbkwxYlpB|e71c25127cfb23241089a277f5d7c909165085f901f9d58cf93c5d7ec7420217"; d_c0="AIDgk4-Xig2PTlryga7LwT30h_-3DUHnGbc=|1525419053"; __DAYU_PP=zYA2JUmBnVe2bBjq7qav2ac8d8025bbd; _zap=d299f20c-20cc-4202-a007-5dd6863ccce9‘,
13     ‘Host‘: ‘www.zhihu.com‘,
14     ‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
15
16 }
17 r = requests.get("http://www.zhihu.com",headers=headers)
18 print(r.text)

3. 会话维持:

1 import requests
2
3 requests.get("http://httpbin.org/cookies/set/umber/123456789")
4 r = requests.get("http://httpbin.org/cookies")
5 print(r.text)
6 s = requests.Session()
7 s.get("http://httpbin.org/cookies/set/umber/123456789")
8 r = s.get(‘http://httpbin.org/cookies‘)
9 print(r.text)
 1 {
 2   "cookies": {}
 3 }
 4
 5 {
 6   "cookies": {
 7     "umber": "123456789"
 8   }
 9 }
10
11
12 Process finished with exit code 0

4. SSl证书验证

requests还提供了证书验证的功能。 当发送 HTTP请求的时候,它会检查 SSL证书,我们可以使用 verify参数控制是否检查此证书。 其实如果不加 verify参数的话,默认是 True,会自动验证。

1 import requests
2 #from requests.packages import urllib3
3 import logging
4
5 logging.captureWarnings(True)
6 #urllib3.disable_warnings()
7 response = requests.get(‘https://www.12306.cn‘, verify=False)
8 print(response.status_code)

5. 代理设置

6. 超时设置

r = requests.get(‘http://www.taobao.com‘, timeout=1)

7. 身份认证

1 import requests
2 from requests.auth import HTTPBasicAuth
3
4 r = requests.get(‘http://localhost:5000‘, auth=HTTPBasicAuth(‘username‘, ‘password‘))
5 print(r.status_code)

8.Prepared Request:将请求表示为数据结构

from requests import Request, Session

url = ‘http://httpbin.org/post‘
data = {
    ‘name‘: ‘germey‘
}
headers = {
    ‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘
}
s = Session()
req = Request(‘POST‘,url,data=data,headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)

10. 正则表达式:

https://www.cnblogs.com/chengchengaqin/p/9708044.html

原文地址:https://www.cnblogs.com/chengchengaqin/p/9784229.html

时间: 2024-11-08 04:37:23

《python3网络爬虫开发实战》--基本库的使用的相关文章

[Python3网络爬虫开发实战] 1.8.2-Scrapy的安装

Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted 14.0.lxml 3.4和pyOpenSSL 0.14.在不同的平台环境下,它所依赖的库也各不相同,所以在安装之前,最好确保把一些基本库安装好.本节就来介绍Scrapy在不同平台的安装方法. 1. 相关链接 官方网站:https://scrapy.org 官方文档:https://docs.scrapy.org PyPI:https://pypi.python.org/pypi/Scrapy GitHub:

【Python3网络爬虫开发实战】 分析Ajax爬取今日头条街拍美图

前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:haoxuan10 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 准备工作在本节开始之前,请确保已经安装好requests库.如果没有安装,可以参考第1章.另外如果你对python的库不是很熟的话,建议先去小编的Python交流.裙 :一久武其而而流

[Python3网络爬虫开发实战] 1.5.2-PyMongo的安装

在Python中,如果想要和MongoDB进行交互,就需要借助于PyMongo库,这里就来了解一下它的安装方法. 1. 相关链接 GitHub:https://github.com/mongodb/mongo-python-driver 官方文档:https://api.mongodb.com/python/current/ PyPI:https://pypi.python.org/pypi/pymongo 2. pip安装 这里推荐使用pip安装,命令如下: 1 pip3 install py

[Python3网络爬虫开发实战] 1.3.1-lxml的安装

lxml是Python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高.本节中,我们了解一下lxml的安装方式,这主要从Windows.Linux和Mac三大平台来介绍. 1. 相关链接 官方网站:http://lxml.de GitHub:https://github.com/lxml/lxml PyPI:https://pypi.python.org/pypi/lxml 2. Windows下的安装 在Windows下,可以先尝试利用pip安装,此时直接执

[Python3网络爬虫开发实战] 1.3.3-pyquery的安装

pyquery同样是一个强大的网页解析工具,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便.本节中,我们就来了解一下它的安装方式. 1. 相关链接 GitHub:https://github.com/gawel/pyquery PyPI:https://pypi.python.org/pypi/pyquery 官方文档:http://pyquery.readthedocs.io 2. pip安装 这里推荐使用pip安装,命令如下: 1 pip3 install

[Python3网络爬虫开发实战] 1.2.6-aiohttp的安装

之前介绍的Requests库是一个阻塞式HTTP请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理.其实,这个过程比较耗费资源.如果程序可以在这个等待过程中做一些其他的事情,如进行请求的调度.响应的处理等,那么爬取效率一定会大大提高. aiohttp就是这样一个提供异步Web服务的库,从Python 3.5版本开始,Python中加入了async/await关键字,使得回调的写法更加直观和人性化.aiohttp的异步操作借助于async/await关键

[Python3网络爬虫开发实战] 1.5.3-redis-py的安装

对于Redis来说,我们要使用redis-py库来与其交互,这里就来介绍一下它的安装方法. 1. 相关链接 GitHub:https://github.com/andymccurdy/redis-py 官方文档:https://redis-py.readthedocs.io/ 2. pip安装 这里推荐使用pip安装,命令如下: 1 pip3 install redis 运行完毕之后,即可完成redis-py的安装. 3. 验证安装 为了验证redis-py库是否已经安装成功,可以在命令行下测试

《python3网络爬虫开发实战》--Scrapy

1. 架构 引擎(Scrapy):用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler):用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 下载器(Downloader):用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) 爬虫(Spiders):爬虫是主要干活的, 用

[Python3网络爬虫开发实战] 1.7.1-Charles的安装

Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具. 1. 相关链接 官方网站:https://www.charlesproxy.com 下载链接:https://www.charlesproxy.com/download 2. 下载Charles 我们可以在官网下载最新的稳定版本,如图1-43所示.可以发现,它支持Windows.Linux和Mac三大平台. 图1-43 Charles下载页面 直接点击对应的安装