做英文网站公司,中英文网站建设方案,wordpress 文档模板下载,淘宝客网站要备案吗1. 爬虫和代理IP的关系
爬虫和代理IP之间的关系密切#xff0c;代理IP可以安全采集公开数据信息#xff0c;保证爬虫的持续运行和数据采集。
2. 使用代理IP的好处
使用代理IP可以带来以下好处#xff1a;
匿名保护#xff0c;保护隐私安全安全采集公开数据信息分散访问…1. 爬虫和代理IP的关系
爬虫和代理IP之间的关系密切代理IP可以安全采集公开数据信息保证爬虫的持续运行和数据采集。
2. 使用代理IP的好处
使用代理IP可以带来以下好处
匿名保护保护隐私安全安全采集公开数据信息分散访问压力提高爬取效率和稳定性。收集不同地区或代理服务器上的数据用于数据分析和对比。
然而使用代理IP也存在一些挑战和注意事项 IP安全性低无法高效采集公开数据。 使用代理IP可能增加网络请求的延迟和复杂性需要合理配置和调整爬虫程序。 使用代理IP需要遵守相关法律法规和目标网站的使用规则不得进行非法活动或滥用代理IP服务。
博主最近使用的是亮数据家的代理IPIP质量很高个人感觉还不错亮数据官网 3. 爬取目标
这次爬虫实战的目标是某瓣电影Top250排行榜爬取的字段排名、电影名、评分、评价人数、制片国家、电影类型、上映时间、主演、影片链接 预期效果写入Excel
4. 准备工作
Python3.10
编辑器PyCharm
第三方模块自行安装
pip install requests # 网页数据爬取
pip install pandas # 数据处理
pip install xlwt # 写入Excel
pip install lxml # 提取网页数据5. 爬虫实现
5.1 获取代理IP
1、打开亮数据的官网点击立刻使用点击试用 2、输入账号密码注册账号 3、注册后以后点击查看代理IP产品 4、选择适合自己ide产品如果你使用公司邮件注册可以找客服开通免费试用 5、获取代理IP后通过proxies参数添加代理发送请求案例代码
proxies {http: http://IP地址:端口号, # http型https: https://IP地址:端口号 # https型
}
response requests.get(url,headersheaders,proxiesproxies)5.2 导入模块
import re # 正则用于提取字符串
import pandas as pd # pandas用于写入Excel文件
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒5.3 设置翻页
首先我们来分析一下网站的翻页一共有10页 第一页主页为
https://movie.douban.com/top250?start0filter第二页
https://movie.douban.com/top250?start25filter第三页
https://movie.douban.com/top250?start50filter可以看出每页只有start后面的参数每次上涨25所以用循环来构造10页网页链接
def main():data_list [] # 空列表用于存储每页获取到的数据for i in range(10):url https://movie.douban.com/top250?startstr(i*25)filter5.4 发送请求
这里我们创建一个get_html_str(url)函数传入网页url链接通过添加请求头和代理IP发送请求获取网页源码注意这里代理IP这里需要看5.1 获取代理IP自己去获取博主的已过期
def get_html_str(url):发送请求获取响应# 请求头模拟浏览器headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36}# 添加代理IP这里代理IP这里需要看5.1 获取代理IP自己去获取博主的已过期proxies {http: http://183.134.17.12:9181,}# 添加请求头和代理IP发送请求response requests.get(url,headersheaders,proxiesproxies)# 获取网页源码html_str response.content.decode()# 返回网页源码return html_str5.5 提取数据
当我们拿到网页源码后创建一个get_data(html_str,data_list)函数传入html_str也就是网页源码、data_list用于存储数据就可以使用xpath开始解析数据了
1、分析网页结构可以看到每一个电影都在ol标签下的li标签下 2、然后我们看li标签的数据是否完整可以看到我们需要的字段都有 3、接下来开始写解析代码
def get_data(html_str, data_list):提取数据写入列表# 将html字符串转换为etree对象方便后面使用xpath进行解析html_data etree.HTML(html_str)# 利用xpath取到所有的li标签li_list html_data.xpath(//ol[classgrid_view]/li)# 打印一下li标签个数看是否和一页的电影个数对得上print(len(li_list)) # 输出25没有问题# 遍历li_list列表取到某一个电影的对象for li in li_list:# 用xpath获取每一个字段信息# 排名ranking li.xpath(.//div[classpic]/em/text())[0]# 电影名title li.xpath(.//div[classhd]/a/span[1]/text())[0]# 评分score li.xpath(.//span[classrating_num]/text())[0]# 评价人数evaluators_number li.xpath(.//div[classstar]/span[4]/text())[0]evaluators_number evaluators_number.replace(人评价, ) # 将人评价替换为替换为空更美观# 导演、主演str1 li.xpath(.//div[classbd]/p[1]//text())[0]# 利用正则提取导演名try:director re.findall(导演: (.*?)主演, str1)[0]director re.sub(\xa0, , director)except:director None# 利用正则提取主演try:performer re.findall(主演: (.*), str1)[0]performer re.sub(\xa0, , performer)except:performer None# 上映时间、制片国家、电影类型都在这里标签下str2 li.xpath(.//div[classbd]/p[1]//text())[1]#try:# 通过斜杠进行分割str2_list str2.split( / )# 年份year re.sub([\n ], , str2_list[0])# 制片国家country str2_list[1]# 影片类型type re.sub([\n ], , str2_list[2])except:year Nonecountry Nonetype Noneurl li.xpath(.//div[classhd]/a/href)[0]print({排名: ranking, 电影名: title, 评分: score, 评价人数: evaluators_number, 导演: director,主演: performer, 年份: year, 制片国家: country, 影片类型: type, 影片主页链接: url})data_list.append({排名: ranking, 电影名: title, 评分: score, 评价人数: evaluators_number, 导演: director,主演: performer, 年份: year, 制片国家: country, 影片类型: type, 影片主页链接: url})运行结果 5.6 保存数据
当我们提取完数据以后就可以写入用pandas写入Excel表格中创建into_excel(data_list)函数将存储数据的data_list列表作为参数传入然后用pandas的to_excel函数写入excel表格
def into_excel(data_list):# 创建DataFrame对象df pd.DataFrame(data_list)# 写入excel文件df.to_excel(电影Top250排行.xlsx)5.7 调用主函数
第一步设置翻页然后获取网页源码接着提取数据限制爬取的速度最后写入Excel文件
def main():data_list [] # 空列表用于存储每页获取到的数据# 1. 设置翻页for i in range(10):url https://movie.douban.com/top250?start str(i * 25) filter# 2. 获取网页源码html_str get_html_str(url)# 3. 提取数据get_data(html_str, data_list)# 4. 限制爬取的速度time.sleep(5)# 5. 写入excelinto_excel(data_list)5.8 完整源码
这里附上完整源码注意get_html_str(url)函数中的代理IP这里需要看5.1 获取代理IP自己去获取博主的已过期然后直接运行程序即可
import re # 正则用于提取字符串
import pandas as pd # pandas用于写入Excel文件
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒def get_html_str(url):发送请求获取响应# 请求头模拟浏览器headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36}# 添加代理IP这里代理IP这里需要看5.1 获取代理IP自己去获取博主的已过期proxies {http: http://183.134.17.12:9181,}# 添加请求头和代理IP发送请求response requests.get(url, headersheaders, proxiesproxies) ## 获取网页源码html_str response.content.decode()# 返回网页源码return html_strdef get_data(html_str, data_list):提取数据写入列表# 将html字符串转换为etree对象方便后面使用xpath进行解析html_data etree.HTML(html_str)# 利用xpath取到所有的li标签li_list html_data.xpath(//ol[classgrid_view]/li)# 打印一下li标签个数看是否和一页的电影个数对得上print(len(li_list)) # 输出25没有问题# 遍历li_list列表取到某一个电影的对象for li in li_list:# 用xpath获取每一个字段信息# 排名ranking li.xpath(.//div[classpic]/em/text())[0]# 电影名title li.xpath(.//div[classhd]/a/span[1]/text())[0]# 评分score li.xpath(.//span[classrating_num]/text())[0]# 评价人数evaluators_number li.xpath(.//div[classstar]/span[4]/text())[0]evaluators_number evaluators_number.replace(人评价, ) # 将人评价替换为替换为空更美观# 导演、主演str1 li.xpath(.//div[classbd]/p[1]//text())[0]# 利用正则提取导演名try:director re.findall(导演: (.*?)主演, str1)[0]director re.sub(\xa0, , director)except:director None# 利用正则提取主演try:performer re.findall(主演: (.*), str1)[0]performer re.sub(\xa0, , performer)except:performer None# 上映时间、制片国家、电影类型都在这里标签下str2 li.xpath(.//div[classbd]/p[1]//text())[1]#try:# 通过斜杠进行分割str2_list str2.split( / )# 年份year re.sub([\n ], , str2_list[0])# 制片国家country str2_list[1]# 影片类型type re.sub([\n ], , str2_list[2])except:year Nonecountry Nonetype Noneurl li.xpath(.//div[classhd]/a/href)[0]print({排名: ranking, 电影名: title, 评分: score, 评价人数: evaluators_number, 导演: director,主演: performer, 年份: year, 制片国家: country, 影片类型: type, 影片主页链接: url})data_list.append({排名: ranking, 电影名: title, 评分: score, 评价人数: evaluators_number, 导演: director,主演: performer, 年份: year, 制片国家: country, 影片类型: type, 影片主页链接: url})def into_excel(data_list):# 创建DataFrame对象df pd.DataFrame(data_list)# 写入excel文件df.to_excel(电影Top250排行.xlsx)def main():data_list [] # 空列表用于存储每页获取到的数据# 1. 设置翻页for i in range(10):url https://movie.douban.com/top250?start str(i * 25) filter# 2. 获取网页源码html_str get_html_str(url)# 3. 提取数据get_data(html_str, data_list)# 4. 限制爬取的速度time.sleep(5)# 5. 写入excelinto_excel(data_list)if __name__ __main__:main()程序运行完毕后生成excel文件