先把源码放在这里方便有需要的朋友借鉴(该打码已经打码)
import requests
import csv
from lxml import etree
fp = open("films.CSV",'a',newline='',encoding='utf-8-sig')
writer = csv.writer(fp)
writer.writerow(('名称','导演','星级','评价数','链接'))
for i in range(0,10):
url = f'https://打码.打码.com/top250?start={i*25}&filter='
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}
response = requests.get(url = url ,headers = headers) #模拟浏览器向网站发出Get请求
# response.encoding = 'UTF-8'
content = response.text
tree = etree.HTML(content) #解析服务器文件
for page in range(1,25) :
name = tree.xpath(f'此处打码/ol/li[{page}]/div/div[2]/div[1]/a/span[1]/text()')[0] #获取电影名称
# print(name)
director = tree.xpath(f'此处打码/ol/li[{page}]/div/div[2]/div[2]/p[1]/text()[1]')[0] #获取导演
# print(director)
score = tree.xpath(f'此处打码/ol/li[{page}]/div/div[2]/div[2]/div/span[2]/text()')[0] #获取星级
# print(score)
people = tree.xpath(f'此处打码/ol/li[{page}]/div/div[2]/div[2]/div/span[4]/text()')[0] #获取评价数
link = tree.xpath(f'此处打码/ol/li[{page}]/div/div[2]/div[1]/a/@href')[0] #获取链接
# print(link)
writer.writerow((name,director,score,people,link))
pic = tree.xpath(f'此处打码/ol/li[{page}]/div/div[1]/a/img/@src')[0] #获取图片
img_data = requests.get(pic).content
with open(f'films_pic/{name}.jpg', mode='wb') as f:
f.write(img_data)
print(f'第{i}页完成')
注意:1.headers中最好再自行添加Cookie不然爬几次就会被墙掉
2.保存图片的文件夹要自行创建并放在根目录中
首先我们不着急去想如何爬取整个排行榜,我们从第一页着手
获取url,定制headers
url = f'https://打码.打码.com/top250?start=0&filter='
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}
查看网页检查,可知该网站需要Get请求
使用requests库,发起Get请求
import requests #导包
response = requests.get(url = url ,headers = headers) #模拟浏览器向网站发出Get请求
content = response.text
取得目标url的源码后,我们就要从中取得我们想要的数据,这个时候我们可以使用Xpath
from lxml import etree #导包
tree = etree.HTML(content) #解析服务器文件
然后去定位我们想要的数据
我用的是一个比较懒的方法
在网页上右键我们想要的数据,点击“检查”,就会跳转到源码对应的位置,我们再次右键,找到“Copy”(也就是复制,不知道各位汉化了没有),再点击“Copy Xpath”,这就是我们要的“路径”(可能存在反爬,我遇见的是藏在“路径”中的tbody这个单词,导致爬取数据为空,去掉即可)
name = tree.xpath(f'此处打码/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')[0] #获取电影名称
我仅列出了一个例子,其他步骤相同不再重复
接下来是下载图片
pic = tree.xpath(f'此处打码/ol/li[1]/div/div[1]/a/img/@src')[0] #获取链接
img_data = requests.get(pic).content
with open(f'films_pic/{name}.jpg', mode='wb') as f:
f.write(img_data)
这个就不做过多解释了
这就是一个电影的爬取
然后通过观察同一页电影的“路径”规律,我们只需要用一个循环爬取一整页的电影,再用循环来爬取。
来到存储数据的环节
存到CSV文件中
import csv #导包
fp = open("films.CSV",'a',newline='',encoding='utf-8-sig') #创建并打开
writer = csv.writer(fp) #写入
writer.writerow(('名称','导演','星级','评价数','链接')) #写入第一列
writer.writerow((name,director,score,people,link)) #写入对应的数据
哪里有错误,可以私信我,或者在评论区里提出,非常感谢!