下面我来详细讲解“python爬取亚马逊书籍信息代码分享”的完整攻略。
一、准备工作
在进行爬虫操作前,需要安装相关依赖包:
- requests:用于发起网络请求
- lxml:用于解析HTML文档
安装命令如下:
pip install requests
pip install lxml
二、分析网页结构
在进行爬虫操作前,需要先分析目标网页的结构。这里以亚马逊图书页面为例。
通过查看网页源码,我们可以找到每本书的详细信息都包含在一个div
标签中,而每个div
标签又包含一个书名h2
标签和一个价格span
标签。因此我们可以根据这些HTML标签来提取我们需要的信息。
三、爬虫实现
下面是使用Python代码来实现爬取亚马逊书籍信息的完整攻略:
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/58.0.3029.110 Safari/537.3'}
# 发起请求
url = 'https://www.amazon.cn/s?i=stripbooks&rh=n%3A658390051&page=1&_encoding=UTF8&ref=lp_658390051_pg_1'
response = requests.get(url, headers=headers)
# 解析HTML文档
html = etree.HTML(response.text)
# 获取每本书的信息
books = html.xpath('//div[@data-component-type="s-search-result"]')
for book in books:
# 获取书名
title = book.xpath('.//h2/a/@title')[0]
# 获取价格
price = book.xpath('.//span[@class="a-price-whole"]/text()')[0]
# 打印结果
print('书名:', title)
print('价格:', price)
通过上面的代码,我们可以获取到每本书的书名和价格,具体内容如下:
书名: 你是人间四月天
价格: 20
书名: 青春集结号:江苏师范大学文学创作2016-2020
价格: 58
......
这是爬取第一页数据的结果。如果要爬取更多页的信息,只需要修改url中的页码即可,例如:
url = 'https://www.amazon.cn/s?i=stripbooks&rh=n%3A658390051&page=2&_encoding=UTF8&ref=lp_658390051_pg_2'
示例一
如果需要将获取到的书籍信息存储到CSV文件中,可以使用Python的csv模块,代码如下:
import requests
from lxml import etree
import csv
# 定义请求头
headers = {
'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'}
# 发起请求
url = 'https://www.amazon.cn/s?i=stripbooks&rh=n%3A658390051&page=1&_encoding=UTF8&ref=lp_658390051_pg_1'
response = requests.get(url, headers=headers)
# 解析HTML文档
html = etree.HTML(response.text)
# 获取每本书的信息
books = html.xpath('//div[@data-component-type="s-search-result"]')
# 存储结果到CSV文件
with open('books.csv', mode='w', newline='', encoding='utf-8-sig') as csv_file:
writer = csv.writer(csv_file)
writer.writerow(['书名', '价格'])
for book in books:
title = book.xpath('.//h2/a/@title')[0]
price = book.xpath('.//span[@class="a-price-whole"]/text()')[0]
writer.writerow([title, price])
执行上面的代码后,会在当前目录下创建一个books.csv
文件,并将获取到的书籍信息存储到其中。
示例二
如果要让爬虫更加高效,可以使用多线程来同时爬取多个网页,代码如下:
import requests
from lxml import etree
import csv
import threading
import queue
# 定义请求头
headers = {
'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'}
# 定义爬虫函数
def spider(q):
while not q.empty():
url = q.get()
response = requests.get(url, headers=headers)
html = etree.HTML(response.text)
books = html.xpath('//div[@data-component-type="s-search-result"]')
for book in books:
title = book.xpath('.//h2/a/@title')[0]
price = book.xpath('.//span[@class="a-price-whole"]/text()')[0]
print('书名:', title)
print('价格:', price)
# 创建队列,存储所有需要爬取的链接
url_queue = queue.Queue()
for i in range(1, 6):
url = f'https://www.amazon.cn/s?i=stripbooks&rh=n%3A658390051&page={i}&_encoding=UTF8&ref=lp_658390051_pg_{i}'
url_queue.put(url)
# 启动多线程爬虫
threads = []
for i in range(5):
t = threading.Thread(target=spider, args=(url_queue,))
threads.append(t)
t.start()
# 等待所有线程执行完毕
for t in threads:
t.join()
上面的代码中,首先将所有需要爬取的链接存储到一个队列中。然后创建5个线程分别执行爬虫函数,每个线程都从队列中取出一个链接进行爬取。这样就可以同时爬取多个链接,大大提升爬虫的效率。
四、总结
上述便是使用Python爬取亚马逊书籍信息的完整攻略,希望对大家有所帮助。如果还有不明白的地方,可以留言再进行探讨。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python爬取亚马逊书籍信息代码分享 - Python技术站