找回密码
 立即注册
CeraNetworksBGVM服务器主机交流IP归属甄别会员请立即修改密码
查看: 811|回复: 10

另类下载91的脚本—介绍大佬Kenneth Reitz的新爬虫库requests

[复制链接]

56

主题

297

回帖

1385

积分

金牌会员

积分
1385
发表于 2018-3-1 11:41:01 | 显示全部楼层 |阅读模式
本帖最后由 wenguonideshou 于 2018-4-12 14:24 编辑

众所周知Python界超级大佬Kenneth Reitz是大名鼎鼎的requests库的作者
近日,该大佬再次重磅发布Python html解析库requests-html(原文:Pythonic HTML Parsing for Humans™)
短短数日已经获得5000+ star
而且大佬还在夜以继日的更新,最新更新时间是3小时之前,当前最新版本是0.8.0
Gayhub地址:https://github.com/kennethreitz/requests-html
文档地址:http://html.python-requests.org/
注意:只支持Python3.6+

简单介绍:
该库有以下功能:

完全支持JavaScript(基于pyppeteer)!
支持CSS选择器(基于PyQuery)
支持XPath选择器
伪装user-agent
URL自动重定向
连接池和cookie池(基于requests.Session)
所有和requests一样的函数、参数
完善的文档和指导


安装方法:

$ pip install requests-html

GET方式请求 'python.org' :
>>> from requests_html import HTMLSession
>>> session = HTMLSession()
>>> r = session.get('https://python.org/')

当前页面的所有超链接(相对地址):
>>> r.html.links
{'//docs.python.org/3/tutorial/', '/about/apps/', 'https://github.com/python/pythondotorg/issues', '/accounts/login/', '/dev/peps/', '/about/legal/', '//docs.python.org/3/tutorial/introduction.html#lists', '/download/alternatives', 'http://feedproxy.google.com/~r/PythonInsider/~3/kihd2DW98YY/python-370a4-is-available-for-testing.html', '/download/other/', '/downloads/windows/', 'https://mail.python.org/mailman/listinfo/python-dev', '/doc/av', 'https://devguide.python.org/', '/about/success/#engineering', 'https://wiki.python.org/moin/PythonEventsCalendar#Submitting_an_Event', 'https://www.openstack.org', '/about/gettingstarted/', 'http://feedproxy.google.com/~r/PythonInsider/~3/AMoBel8b8Mc/python-3.html', '/success-stories/industrial-light-magic-runs-python/', 'http://docs.python.org/3/tutorial/introduction.html#using-python-as-a-calculator', '/', 'http://pyfound.blogspot.com/', '/events/python-events/past/', '/downloads/release/python-2714/', 'https://wiki.python.org/moin/PythonBooks', 'http://plus.google.com/+Python', 'https://wiki.python.org/moin/',
#列表太长,略过中间部分
'https://docs.python.org/faq/', '//docs.python.org/3/tutorial/controlflow.html#defining-functions'}

当前页面的所有超链接(绝对地址):
>>> r.html.absolute_links
{'https://github.com/python/pythondotorg/issues', 'https://docs.python.org/3/tutorial/', 'https://www.python.org/about/success/',
#列表太长,略过中间部分
'https://www.python.org/doc/essays/', 'http://www.djangoproject.com/', 'https://www.python.org/success-stories/industrial-light-magic-runs-python/', 'http://feedproxy.google.com/~r/PythonInsider/~3/x_c9D0S-4C4/python-370b1-is-now-available-for.html', 'http://wiki.python.org/moin/TkInter', 'https://www.python.org/jobs/', 'https://www.python.org/events/python-events/604/'}


使用CSS选择器选取元素:
>>> about = r.html.find('#about', first=True)

获取元素文本内容:
>>> print(about.text)
About
Applications
Quotes
Getting Started
Help
Python Brochure

获取元素的属性:
>>> about.attrs
{'id': 'about', 'class': ('tier-1', 'element-1'), 'aria-haspopup': 'true'}

查看元素的HTML源代码:
>>> about.html
'\n[url=]About[/url]\n\n[url=]Applications[/url]\n[url=]Quotes[/url]\n[url=]Getting Started[/url]\n[url=]Help[/url]\nPython Brochure\n\n'

在元素内选取元素:
>>> about.find('a')
[, , , , , ]

元素内的超链接(绝对地址):
>>> about.absolute_links
{'http://brochure.getpython.info/', 'https://www.python.org/about/gettingstarted/', 'https://www.python.org/about/', 'https://www.python.org/about/quotes/', 'https://www.python.org/about/help/', 'https://www.python.org/about/apps/'}

在当前页面的HTML源代码内查找文本:
>>> r.html.search('Python is a {} language')[0]
programming

更复杂的CSS选择器 (从Chrome开发者工具复制而来):
>>> r = session.get('https://github.com/')
>>> sel = 'body > div.application-main > div.jumbotron.jumbotron-codelines > div > div > div.col-md-7.text-center.text-md-left > p'
>>> print(r.html.find(sel, first=True).text)
GitHub is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside millions of other developers.

同样支持Xpath:
>>> r.html.xpath('a')
[]


获取通过JavaScript展现的文本:
>>> r = session.get('http://python-requests.org')
>>> r.html.render()
>>> r.html.search('Python 2 will retire in only {months} months!')['months']
'25'
# 注意,第一次使用render() 方法,系统会自动下载Chromium到home目录(Windows系统则为users目录),仅下载一次

不使用Requests做WEB请求,直接解析字符串:
>>> from requests_html import HTML
>>> doc = """"""
>>> html = HTML(html=doc)
>>> html.links
{'https://httpbin.org'}


说了那么多,我们实战看看吧!
在国外VPS/服务器爬





91.zip
(1.11 KB, 下载次数: 243)

2018-3-1 16:34 上传
点击文件名下载附件




本机开启小飞机,本机爬





91_ss.zip
(1.15 KB, 下载次数: 216)

2018-3-1 16:34 上传
点击文件名下载附件





其中部分代码使用eqblog的爬虫代码,在此表示感谢




是不是觉得Python很有趣很强大?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
回复

使用道具 举报

3

主题

17

回帖

101

积分

注册会员

积分
101
发表于 2018-3-8 13:06:09 | 显示全部楼层
C:\Users\mmmcz\Desktop\91>python 91.py
Traceback (most recent call last):
  File "91.py", line 85, in
    main(4284)
  File "91.py", line 78, in main
    for url in page_url.html.absolute_links:
  File "D:\anaconda3\lib\site-packages\requests_html.py", line 329, in absolute_links
    return set(gen())
  File "D:\anaconda3\lib\site-packages\requests_html.py", line 326, in gen
    for link in self.links:
  File "D:\anaconda3\lib\site-packages\requests_html.py", line 300, in links
    return set(gen())
  File "D:\anaconda3\lib\site-packages\requests_html.py", line 291, in gen
    for link in self.find('a'):
  File "D:\anaconda3\lib\site-packages\requests_html.py", line 227, in find
    for found in self.pq(selector)
  File "D:\anaconda3\lib\site-packages\requests_html.py", line 124, in pq
    self._pq = PyQuery(self.html)
  File "D:\anaconda3\lib\site-packages\requests_html.py", line 90, in html
    return self.raw_html.decode(self.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 10884: invalid continuation byte

这种错误是什么 第一次遇到
回复

使用道具 举报

1

主题

28

回帖

71

积分

注册会员

积分
71
发表于 2018-3-1 11:43:11 | 显示全部楼层
本帖最后由 O2sun 于 2018-3-1 11:49 编辑



开源让生活更美好

早晚我会成为肾亏MJJ


=============================

肉测很好用 感谢2位作者分享
回复

使用道具 举报

40

主题

1576

回帖

4882

积分

论坛元老

积分
4882
发表于 2018-3-1 11:43:20 | 显示全部楼层
厉害 支持大佬
回复

使用道具 举报

53

主题

238

回帖

917

积分

高级会员

积分
917
发表于 2018-3-1 11:44:08 | 显示全部楼层
看不懂,支持一下
回复

使用道具 举报

1

主题

5

回帖

19

积分

新手上路

积分
19
发表于 2018-3-1 11:45:52 | 显示全部楼层
厉害 支持大佬
回复

使用道具 举报

4

主题

13

回帖

150

积分

注册会员

积分
150
发表于 2018-3-1 11:46:52 | 显示全部楼层
支持一下  谢谢分享
回复

使用道具 举报

203

主题

1709

回帖

6438

积分

论坛元老

积分
6438
发表于 2018-3-1 11:48:14 | 显示全部楼层
收藏一下,不过91的视频太模糊.


回复

使用道具 举报

hbjzpm 该用户已被删除
发表于 2018-3-1 11:50:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

75

主题

456

回帖

2227

积分

金牌会员

积分
2227
发表于 2018-3-1 11:56:02 | 显示全部楼层
看来要学习python了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|HS2V主机综合交流论坛

GMT+8, 2024-5-18 12:34 , Processed in 0.064891 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表