1. 程式人生 > >用Requests和正則表示式爬取豆瓣圖書TOP250

用Requests和正則表示式爬取豆瓣圖書TOP250

思路和上文大同小異。

import requests
from requests.exceptions import RequestException
import re
import json


headers = {'User-Agent':'Mozilla/5.0(Macintosh;Intel Mac OS X 10_11_4)AppleWebKit/537.36(KHTML,like Gecko)Chrome/52.0.2743.116 Safari/537.36'}
#提取單頁內容,用try,except方便找bug
def get_one_page(url):
    try
: response = requests.get(url, headers=headers)#傳入headers引數 if response.status_code == 200: return response.text return response.status_code except RequestException:#捕獲這個型別的異常 return None def parse_one_page(html):#定義一個函式用來解析html程式碼 #生成一個正則表示式物件
pattern = re.compile('<table.*?href.*?title="(\S+)".*?</a>.*?class.*?>(.*?)</p>.*?rating_nums">(.*?)</span>.*?</table>',re.S) items = re.findall(pattern, html) #items是一個list,其中的每個內容都是一個元組 #將雜亂的資訊提取並格式化,變成一個字典形式 for item in items: yield { #構造一個字典 'title'
: item[0], 'imf': item[1], '評分': item[2], } def write_to_file(content): #json.dumps將dict轉json字串型別;顯示中文所以open中加上encoding;注意換行 with open('doubantop250.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) + '\n') f.close def main(offset): #url= 'http://maoyan.com/board/6?' url = 'https://book.douban.com/top250?start='+str(offset) html = get_one_page(url) global i for item in parse_one_page(html):#item是一個生成器 print('No.',i,item) write_to_file(item) i=i+1 if __name__ == '__main__': i=1 for j in range(10): main(j*25)

結果:
在這裡插入圖片描述