试着复习了下之前学习的爬虫,在看之前一些前辈发的帖子里面有些大佬说要防止反爬,就问了下gpt,试着加入了个随机等待时间。还有有通过黛——{}{}【黎】的方式来防止不知道咋买就没用。(之前看过有那种有滑块验证、拼图验证不知道各位大神是怎么处理的{:301_1004:} )
import random
import time
import requests
from lxml import etree
import pandas as pd
headers = {
"User-Agent": ""#填入自己选择的伪装头
}
# 存储所有电影信息的列表
all_movies = []
# 循环爬取多页数据
for i in range(0, 250, 25): # 每页有25部电影,共250部电影
url = f"https://movie.douban.com/top250?start={i}&filter="
response = requests.get(url=url, headers=headers)
html = etree.HTML(response.text)
rank = html.xpath('//div[@class="pic"]/em/text()') # 排名
name = html.xpath('//div[@class="hd"]/a/span[1]/text()') # 电影名
score = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()') # 评分
people = html.xpath('//div[@class="star"]/span[4]/text()') # 评分人数
tu = list(zip(rank, name, score, people))
all_movies.extend(tu)
time.sleep(random.uniform(1, 2)) # 1-2秒再进行一次循环
df = pd.DataFrame(all_movies, columns=['排名', '电影名', '评分', '评分人数'])
print(df)
#输出表格
df.to_excel('top250_movies.xlsx', index=False)
|