当前位置:   article > 正文

Python爬虫入门之爬虫解析提取数据的四种方法_爬取方法选择(1)_python抓取数据

python抓取数据

同样是requests+BeautifulSoup的爬虫组合,但在信息提取上采用了find_all的方式。效果如下:
在这里插入图片描述

方式三:requests+lxml/etree+xpath表达式

#lxml/etree method import requests from lxml import etree

headers = { ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36’}

url = ‘’ html = requests.get(url = url, headers = headers)

con = etree.HTML(html.text)

title = con.xpath(‘//em[@class=“f14 l24”]/a/text()’)

link = con.xpath(‘//em[@class=“f14 l24”]/a/@href’) for i in zip(title, link):

print({‘标题’: i[0],

‘链接’: i[1]

})

使用lxml库下的etree模块进行解析,然后使用xpath表达式进行信息提取,效率要略高于BeautifulSoup+select方法。这里对两个列表的组合采用了zip方法。效果如下:
在这里插入图片描述

方式四:requests+lxml/html/fromstring+xpath表达式

lxml/html/fromstring method import requests import lxml.html as HTML

headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36’}

url = ‘’ con = HTML.fromstring(requests.get(url = url, headers = headers).text)

title = con.xpath(‘//em[@class=“f14 l24”]/a/text()’)

link = con.xpath(‘//em[@class=“f14 l24”]/a/@href’) for i in zip(title, link):

print({‘标题’: i[0],‘链接’: i[1]

})

跟方法三类似,只是在解析上使用了lxml库下的html.fromstring模块。抓取效果如下:
在这里插入图片描述
很多人觉得爬虫有点难以掌握,因为知识点太多,需要懂前端、需要python熟练、还需要懂数据库,更不用说正则表达式、XPath表达式这些。其实对于一个简单网页的数据抓取,不妨多尝试几种抓取方案,举一反三,也更能对python爬虫有较深的理解。长此以往,对于各类网页结构都有所涉猎,自然经验丰富,水到渠成。

爬取网页数据用正则表达式的话,可以直接从网页源代码文本中匹配,但出错率较高,且熟悉正则表达式的使用也比较难,需要经常翻阅文档。

实际爬取数据大多基于 HTML 结构的 Web 页面,网页节点较多,各种层级关系。可以考虑使用 Xpath 解析器、BeautifulSoup解析器、PyQuery CSS解析器抽取结构化数据,使用正则表达式抽取非结构化数据。

Xpath:可在 XML 中查找信息;支持 HTML 的查找 ;通过元素和属性进行导航,查找效率很高。在学习 Selenium 以及 Scrapy 框架中也都会用到。

BeautifulSoup:依赖于 lxml 的解析库,也可以从 HTML 或 XML 文件中提取数据。

PyQuery:Python仿照 jQuery 严格实现,可以直接解析 DOM 节点的结构,并通过 DOM 节点的一些属性快速进行内容提取。

对于爬取网页结构简单的 Web 页面,有些代码是可以复用的,如下所示:

from fake_useragent import UserAgent

随机产生请求头

ua = UserAgent(verify_ssl=False, path=‘fake_useragent.json’)

def random_ua():

headers = {

“Accept-Encoding”: “gzip”,

“User-Agent”: ua.random

}

return headers

伪装请求头,并可以随机切换,封装为函数,便于复用。

def scrape_html(url):

resp = requests.get(url, headers=random_ua())

print(resp.status_code, type(resp.status_code))

print(resp.text)

if resp.status_code == 200:

return resp.text

else:

logging.info(‘请求网页失败’)

请求网页,返回状态码为 200 说明能正常请求,并返回网页源代码文本。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,Python自动化测试学习等教程。带你从零基础系统性的学好Python!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】

推荐阅读
相关标签