Python11 使用爬虫实现图书250排行榜信息爬取

图片

1.什么是网络爬虫

Python爬虫是使用Python编程语言编写的程序,它能自动从互联网上抓取数据。这类程序一般利用网络请求来访问网站,解析网站的HTML或其他格式的内容,提取出有用的数据,有时还会进行后续的数据处理或存储。

Python爬虫的用途包括:

  1. 数据收集:对于数据分析师和研究人员来说,爬虫可以帮助从各种网站上自动化收集数据,如社交媒体数据、金融市场数据、商品信息等。

  2. 监控网站:爬虫可以用来监控网站的变化,比如价格变动、新闻更新、股票市场动态等,对于商业智能和市场分析尤其有用。

  3. 搜索引擎:搜索引擎如Google和Bing使用爬虫技术来索引互联网上的网页,以便用户可以通过搜索引擎找到这些网页。

  4. 自动化测试:开发者可以使用爬虫来监测网站功能是否正常,比如检查链接是否有效,确保页面内容显示正确等。

  5. 内容聚合:爬虫可用于从多个源收集信息,并将其集成在一起,提供内容聚合服务。例如新闻聚合、博客聚合等。

Python在爬虫领域的流行原因:

  • 强大的库支持:Python拥有强大的库来支持爬虫的制作,如requests用于网络请求,BeautifulSouplxml用于HTML解析,ScrapySelenium用于更复杂的爬虫项目。

  • 简单易学:Python语法简单,易于学习和编写,使得编写爬虫变得更加容易。

  • 广泛的社区支持:由于Python在数据科学和网络爬虫领域的广泛应用,可以很容易地找到问题的解决方案和优化的建议。

尽管Python爬虫有很多合法的应用,但是在使用爬虫时也必须遵守相关法律法规和网站的robots.txt文件,尊重网站的版权和服务条款,合法合规地使用网络爬虫技术。

2.使用爬虫爬取图书250数据

①一般方式(针对未设置反爬虫程序的网站)

由于目标网站存在反爬虫程序,因此运行下面这段代码会显示错误。

代码示例:

import requests  # 发起网络请求
from lxml import etree  # 解析HTML文档

res=requests.get('https://book.douban.com/top250?start=0')
html=etree.HTML(res.text)
book_names=html.xpath('//div[@class="pl2"]/a/@title')
book_authors=html.xpath('//p[@class="pl"]/text()')
book_ratios=html.xpath('//span[@class="rating_nums"]/text()')
book_quotes=html.xpath('//span[@class="inq"]/text()')
# print(book_authors)
# print(book_ratios)
# print(len(book_ratios))
# print(book_quotes)
for i in zip(book_names,book_quotes,book_ratios):
    a,b,c=i
#     print(a,b,c)
authors=[]
for i in book_authors:
    #print(i.split('/')[0])
    authors.append(i.split('/')[0])
# print(authors)

for i in zip(book_names,authors,book_quotes,book_ratios):
    a,b,c,d=i
#     print(i)
    print(a,b,c,d)

由于存在反爬虫程序,因此上面的程序无法获取到网页上的数据。html 对象是 None,这通常是因为 etree.HTML(res.text) 无法解析 res.text 中的内容作为HTML,或者请求得到的内容为空导致。

运行结果:

图片

②对于存在反爬虫的网站

需要添加一些代码防止被网站判定为爬虫程序,但最终的输出数据只有24条,并没有250条

import requests  # 发起网络请求
from lxml import etree  # 解析HTML文档
import time  # 用于控制时间(如等待),以避免请求过于频繁

# 创建会话以维持cookie
session = requests.Session()  # 创建一个会话对象,这可以使得在多次请求中保持某些参数,如Cookies
#  设置User-Agent为一个常见浏览器的标识,这有助于防止被网站以为是爬虫而拒绝服务
session.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
})
# 使用会话对象请求网页,设置超时为10秒
url = 'https://book.douban.com/top250?start=0'
try:
    res = session.get(url, timeout=10)
    res.raise_for_status()  # 如果响应状态码不是 200,将抛出 HTTPError 异常

    html = etree.HTML(res.text)  # 使用lxml的HTML函数解析获取到的网页源码
    if html is not None:
        
  # book_names:提取书名
  # book_authors:提取包含作者和出版信息的文本
  # book_ratios:提取书籍评分
  # book_quotes:提取书籍的引语
        book_names=html.xpath('//div[@class="pl2"]/a/@title')
        book_authors=html.xpath('//p[@class="pl"]/text()')
        book_ratios=html.xpath('//span[@class="rating_nums"]/text()')
        book_quotes=html.xpath('//span[@class="inq"]/text()')
        # print(book_authors)
        # print(book_ratios)
        # print(len(book_ratios))
        # print(book_quotes)
        for i in zip(book_names,book_quotes,book_ratios):  # 使用zip函数将提取的书名、引语和评分组合在一起,并在循环中处理每一项
            a,b,c=i
        #     print(a,b,c)
        authors=[]
        for i in book_authors:
            #print(i.split('/')[0])
            authors.append(i.split('/')[0])
        # print(authors)
        
        for i in zip(book_names,authors,book_quotes,book_ratios):
            a,b,c,d=i
        #     print(i)
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值