Python爬虫(主要是scrapy框架)
2022/1/10 12:04:19
本文主要是介绍Python爬虫(主要是scrapy框架),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、IP代理池(比较简陋,后续更新)
验证ip,proxies用的是两个协议,http和https都要有
import re import requests url = 'https://tool.lu/ip' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62' } proxies ={ 'http':'47.243.190.108:7890', 'https':'47.243.190.108:7890' } res = requests.get(url=url,headers=headers,proxies=proxies,timeout=3).text ip = re.search(r'[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}',res,flags=re.S).group(0) print(ip)
二、python爬虫之scrapy框架
先贴一张图
基本命令
- 生成基本框架
scrapy startproject myspider
- 创建爬虫文件
cd myspider scrapy genspider -t crawl SpiderName DomaimName
ps:上面加的参数 -t crawl 是创建crawlspider,里面的Rule方法可以帮助提取url
例:笔趣阁,全站爬取
- 首先,拿到更多的连接,然后,进入这个分类中,拿到分页的url,再然后,拿到每页的书籍url,并进入详情页
- 使用crawlspider,只需要三行就能拿到
- 解释一下上面的代码
- LinkExtractor :提取器(就是提取页面url的,直接将页面url的规则放进去就行)
- callback : 回调函数,就是提取页面内容,提取url是上面那个方法,这个就用在提取详情页(数据)的时候用
- follow : 这么想,提取到的页面(page)的url,是不是还要再提取一边每个书籍的url,然后再提取详情页面数据,这个时候,就要加个follow=True
- 运行
scrapy crawl SpiderName
- 运行后的数据就在
- 注意看,这个函数名是parse_item()
- 如果是不加任何参数的框架,生成的函数时 parse()
scrapy stratproject myspider
response的一些返回值和参数
- 返回值
- 就是requests的返回参数,url,headers,status
- response.body.decode() : 返回文本对象
- headers :请求头
- 参数
- meta :这个参数主要用于传递item字典对象
- callback:回调函数(有多页数据或有详情页)
- dont_filter : 默认为False,去重
- proxy : 设置代理,一般在item字典中
request.meta['proxy'] = 'https://' + 'ip:port'
- setting中的配置
- download_timeout : 和request模块的timeout一样,设置超时
- max_retry_times : 最大请求次数(默认两次)
- dont_retry : 请求失败的url不再请求
- dont_merge_cookies : scrapy会自动保存返回的cookies,自己添加或不用的话就设置True
- bindaddress :输出绑定IP
- ROBOTSTXT_OBEY:是否遵守协议
- LOG_LEVEL:打印日志等级
- ERROR
- WARNING
- INFO
- CONCURRENT_REQUESTS :开启线程数
- DOWNLOAD_DELAY:下载延迟
- DEFAULT_REQUEST_HEADERS:开启后覆盖默认的请求头
- 下载中间件和爬虫中间件后面的参数越小,优先级越高
scrapy基本用法
设置run文件(setting同级)
from scrapy import cmdline cmdline.execute('scrapy crawl xt'.split())
重写方法 start_requests
更改中间件middlewares
随机UA代理
fake_useragent 是一个包,pip install一下
from fake_useragent import UserAgent class DouyinxingtuUserAgentDownloaderMiddleware: def process_request(self, request, spider): agent = UserAgent(path='fake_useragent_0.1.11.json').random request.headers['User-Agent'] = agent
设置用户代理ip
class DouyinxingtuProxiesDownloaderMiddleware: def process_request(self, request, spider): porixList = getIp() self.porix = random.choice(porixList) # 116.208.24.72:8118 request.meta['proxy'] ='https://'+self.porix print(request.meta) # 如果报错,就返回 def process_exception(self, request, exception, spider): print('删除数据库的值') return request
设置cookie(scrapy中间件里设置cookie要的是字典格式)
上面是直接从浏览器复制的,将字符串转换成字典
class DouyinxingtuCookieDownloaderMiddleware: def process_request(self, request, spider): cookie = self.get_cookie() cookies = dict([l.split("=", 1) for l in cookie.split("; ")]) request.cookies=cookies
基于管道存储
先打开setting配置
这个是pipelines里面的类名
管道类配置
# mysql数据库存储 class DouyinxingtuPipelineMysqlSave: fp=None def open_spider(self,spider): print('爬虫开始') # 连接数据库 pass def process_item(self,item,spider): print(item) # 这个是items中的item pass def close_spider(self,spider): print('爬虫结束') pass
个人习惯,引入items中的类
-
引入类,并赋值
item = DouyinxingtuItem() item['data'] = response['data']
-
items
-
保存数据库(mysql,原生sql)
这篇关于Python爬虫(主要是scrapy框架)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型