广州公司营销型网站建设,沈阳seo博客,logo成品效果图网站,郑州开发小程序多少钱一#xff1a;爬虫 1、爬取的目标 将豆瓣电影网上的电影的基本信息#xff0c;比如#xff1a;电影名称、导演、电影类型、国家、上映年份、评分、评论人数爬取出来#xff0c;并将爬取的结果放入csv文件中#xff0c;方便存储。 2、网站结构 图1豆瓣网网站结构详… 一爬虫 1、爬取的目标 将豆瓣电影网上的电影的基本信息比如电影名称、导演、电影类型、国家、上映年份、评分、评论人数爬取出来并将爬取的结果放入csv文件中方便存储。 2、网站结构 图1豆瓣网网站结构详情 此次实验爬取豆瓣网中电影页面中的电影的基本信息。 每一个电影包括电影名称、导演、电影类型、国家、上映年份、评分、评论人数。页面具体情况如图2所示。 图2豆瓣网电影基本信息详情 3、爬虫技术方案 1、所用技术 网站解析的使用的是Xpath、数据存储使用的是csv。 2、爬取步骤 1、导入所需的库如re、time、requests、lxml、random和csv。 2、定义一个名为main的函数该函数接受两个参数page页码和f文件对象。 3、在main函数中构造请求URL设置请求头并发送GET请求以获取网页内容。 4、使用lxml库解析网页内容提取电影详情页的链接列表和电影名称列表。 5、遍历链接列表和名称列表对于每个链接和名称调用get_info函数来获取电影的详细信息。 6、在get_info函数中同样构造请求URL设置请求头并发送GET请求以获取电影详情页的内容。 7、使用lxml库解析电影详情页的内容提取导演、电影类型、国家、上映时间、评分和评论人数等信息。 8、打印提取到的信息并将其写入CSV文件中。 9、在主程序中创建一个CSV文件并写入表头标题。 10、使用for循环遍历10个页面调用main函数来爬取每一页的电影信息。 11、在每次循环之间让程序休息一段时间以避免过于频繁的请求导致IP被封禁。 4、爬取过程 1、导入所需要的包 import re
from time import sleep
import requests
from lxml import etree
import random
import csv import re导入正则表达式模块用于处理字符串。 from time import sleep从time模块导入sleep函数用于让程序暂停执行一段时间。 import requests导入requests模块用于发送HTTP请求。 from lxml import etree从lxml模块导入etree函数用于解析HTML文档。 import random导入random模块用于生成随机数。 import csv导入csv模块用于操作CSV文件。 2、设置请求头定义min函数接收参数访问连接提取列表 def main(page, f):url fhttps://movie.douban.com/top250?start{page * 25}filterheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36, }resp requests.get(url, headersheaders)tree etree.HTML(resp.text)# 获取详情页的链接列表href_list tree.xpath(//*[idcontent]/div/div[1]/ol/li/div/div[1]/a/href)# 获取电影名称列表name_list tree.xpath(//*[idcontent]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text())for url, name in zip(href_list, name_list):f.flush() # 刷新文件try:get_info(url, name) # 获取详情页的信息except:passsleep(1 random.random()) # 休息print(f第{i 1}页爬取完毕) 3、使用正则表达式开始爬取网页信息 def get_info(url, name):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36,Host: movie.douban.com,}resp requests.get(url, headersheaders)html resp.texttree etree.HTML(html)# 导演dir tree.xpath(//*[idinfo]/span[1]/span[2]/a/text())[0]# 电影类型type_ re.findall(rpropertyv:genre(.*?)/span, html)type_ /.join(type_)# 国家country re.findall(r地区:/span (.*?)br, html)[0]# 上映时间time tree.xpath(//*[idcontent]/h1/span[2]/text())[0]time time[1:5]# 评分rate tree.xpath(//*[idinterest_sectl]/div[1]/div[2]/strong/text())[0]# 评论人数people tree.xpath(//*[idinterest_sectl]/div[1]/div[2]/div/div[2]/a/span/text())[0]print(name, dir, type_, country, time, rate, people) # 打印结果csvwriter.writerow((name, dir, type_, country, time, rate, people)) # 保存到文件中 4、将爬取结果放入csv文件中 5、爬虫结果 二预处理 1、删除列 1、新建转换之后使用文件输入将csv文件输入进行处理 之后进行字段获取。 2、选择转换中的字段选择进行列删除将上映时间这个列进行删除。 2、选择转换中的增加常量增加评论数量这一列查询电影评论的数量这一情况。 最后选择文本文件输出将处理好的数据输出输出的格式是csv文件分割符用逗号隔开编码用UTF-8J进行转码防止输出文件中有乱码。文本文件命名成姓名_处理完成_csv。 4、预处理完全处理全流程 三爬虫数据源代码 代码 import re
from time import sleep
import requests
from lxml import etree
import random
import csvdef main(page, f):url fhttps://movie.douban.com/top250?start{page * 25}filterheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36, }resp requests.get(url, headersheaders)tree etree.HTML(resp.text)# 获取详情页的链接列表href_list tree.xpath(//*[idcontent]/div/div[1]/ol/li/div/div[1]/a/href)# 获取电影名称列表name_list tree.xpath(//*[idcontent]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text())for url, name in zip(href_list, name_list):f.flush() # 刷新文件try:get_info(url, name) # 获取详情页的信息except:passsleep(1 random.random()) # 休息print(f第{i 1}页爬取完毕)def get_info(url, name):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36,Host: movie.douban.com,}resp requests.get(url, headersheaders)html resp.texttree etree.HTML(html)# 导演dir tree.xpath(//*[idinfo]/span[1]/span[2]/a/text())[0]# 电影类型type_ re.findall(rpropertyv:genre(.*?)/span, html)type_ /.join(type_)# 国家country re.findall(r地区:/span (.*?)br, html)[0]# 上映时间time tree.xpath(//*[idcontent]/h1/span[2]/text())[0]time time[1:5]# 评分rate tree.xpath(//*[idinterest_sectl]/div[1]/div[2]/strong/text())[0]# 评论人数people tree.xpath(//*[idinterest_sectl]/div[1]/div[2]/div/div[2]/a/span/text())[0]print(name, dir, type_, country, time, rate, people) # 打印结果csvwriter.writerow((name, dir, type_, country, time, rate, people)) # 保存到文件中if __name__ __main__:# 创建文件用于保存数据with open(03-movie-xpath.csv, a, encodingutf-8, newline)as f:csvwriter csv.writer(f)# 写入表头标题csvwriter.writerow((电影名称, 导演, 电影类型, 国家, 上映年份, 评分, 评论人数))for i in range(10): # 爬取10页main(i, f) # 调用主函数sleep(3 random.random())