案例(二)爬虫预热
项目一:当当网店商品爬虫——爬虫类书籍为例
此案例是运用bs4库find方法对相关内容进行抓取。
-*- coding: utf-8 -*-
import requests
import csv
from bs4 import BeautifulSoup as bs
#获取网页信息
def request_dandan(url):
try:
#用户代理
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
r = requests.get(url,headers=headers)
if r.status_code == 200:
return r.text
except requests.RequestException:
return None
#存放列名
def write_item_to_file():
csv_file = open('dangdang.csv', 'w', newline='', encoding="utf-8")
writer = csv.writer(csv_file)
writer.writerow(['书名','购买链接','纸质书价格','电子书价格','电子书链接','书的详细介绍','书的封面地址','评论地址','作者','出版时间','出版社'])
print('列名已成功放入CSV中')
#解析网页并写入csv文件中
def parse_dangdang_write(html):
csv_file = open('dangdang.csv', 'a', newline='')
writer = csv.writer(csv_file)
#解析网页
soup = bs(html, 'html.parser')
class_tags = ['line'+str(x) for x in range(1,61)]
for class_tag in class_tags:
li = soup.find('li',class_=class_tag)
book_name = li.find('a',class_='pic').get('title') # 书名
paperbook_price = li.find('span',class_='search_now_price').text #纸质书价格
try:
ebook_price = li.find('a',class_='search_e_price').find('i').text #电子书价格
ebook_link = li.find('a',class_='search_e_price').get('href') #电子书链接
except:
ebook_price = ''
ebook_link = ''
detail = li.find('p',class_='detail').text #书的详细介绍
book_purchase_link = li.find('a',class_='pic').get('href') #每本书的详细购买链接
book_cover_link = li.find('a',class_='pic').find('img').get('src')#书的封面地址
comment_link = li.find('a',class_='search_comment_num').get('href') #评论地址
author = li.find('p',class_='search_book_author').find('span').text # 书的作者
public_time = li.find('p',class_='search_book_author').find('span').next_sibling.text[2:]#出版时间
public = li.find('p',class_='search_book_author').find('span').next_sibling.next_sibling.text[3:]#出版社
writer.writerow([book_name, book_purchase_link, paperbook_price, ebook_price, ebook_link, detail, book_cover_link, comment_link, author, public_time, public])
#writer.writerow(['书名', '购买链接', '纸质书价格', '电子书价格', '电子书链接', '书的详细介绍', '书的封面地址', '评论地址', '作者', '出版时间', '出版社'])
csv_file.close()
if __name__ == '__main__':
write_item_to_file()
for page in range(1, 10): # 爬取9页数据存入csv文件
url = 'http://search.dangdang.com/?key=python%C5%C0%B3%E6&act=input&page_index=' + str(page)
html = request_dandan(url) # 获取网页信息
parse_dangdang_write(html) # 解析网页并写入csv文件中
print('第{}页数据成功放入CSV中'.format(page))
运行结果: