python 爬虫
安装
pip install requests
requests模块的使用方法
requests.get()
requests.post()
requests.delete()
requests.put()
requests.options()
requests.requests(
method='post',
url='',
parmas='{}' ,#地址栏后面加数据
data={},#要发送的数据
headers={
'Referer':'', #上一次访问的地址
'User-Agent':'', #模拟浏览器访问
},
json={},
cookies={},
cert={},#https认证文件证书
verify=True #是否携带证书文件
}
BeautifulSoup 文件解析
安装
pip3 install Beautifulsoup4
使用
soup =BeautifulSoup('处理的html','lxml')
soup.p #查看第一个p标签
soup.a #查看第一个a标签
soup.find_all('a') #查看所有的a标签
soup.p.text()#取文本
soup.find.all(atrrs={"class"="ss"}) # 查找属性和属性名
soup.select('.class属性名','标签') #属性选择器
selenium 的使用
安装
http://npm.taobao.org/mirrors/chromedriver/2.35/
if mac系统:
然后将解压后的chromedriver移动到/usr/local/bin目录下
if window系统:
下载chromdriver.exe放到python安装路径的scripts目录中即可,注意最新版本是2.38,并非2.9
scrapy 框架
#Linux:
pip3 install scrapy
#Windows:
a. pip3 install wheel
b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
d. pip3 install pywin32
e. pip3 install scrapy
创建scrapy 项目
scrapy startproject 项目名
cd 项目名
scrapy genspider 应用名称 # 创建爬虫程序
scrapy crawl 应用名称 --nolog
scrapy crawl qiubia.py -o qiubai.json # 将解析的爬虫数据存储json文件中
设置修改settings.py配置文件相关配置
修改内容及其结果如下: 19行:USER_AGENT= 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份 22行:ROBOTSTXT_OBEY= False #可以忽略或者不遵守robots协议
默认只能在终端执行命令,为了更便捷操作
#在项目根目录下新建:entrypoint.py
from scrapy.cmdline import execute execute(['scrapy','crawl','bilibili'])
在中间件里换IP代理
prqroxy = "ip加port" request.meta[ ' download timeout'] = 20 request.meta[ "proxy"] = proxy rereturn None
在下载中间件中添加动态数据加载出来的数据
def __init__(self):
self.bro = webdriver.Chrome(executable_path='A:\chromedriver') #操作的驱动程序的路径
def closed(self,spider):
self.bro.quit() #结束爬虫
在spider中类实例化时 创建
def process_response(self, request, response, spider):
# Called with the response returned from the downloader.
spider.bro.get(url=request.url) #需要篡改的请求
spider.bro.execute_script() # 执行需要js代码
# Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
#篡改后的新的响应数据
#页面数据就包含了动态页面加载出的数据了
page_text = spider.bro.page_source
return HtmlResponse(url=spider.bro.current_url,body=page_text)
基于redis 实现分布式爬虫
安装 scrapy-redis
导入from scrapy_redis.spiders import RedisCrawlSpider
把spider爬虫类继承换成RedisCrawlSpider
添加一个 redis_key 的值 后期再redis中 lpush 的key
更改redis的配置文件
bind
protected-mode no 有yes 改为no
在 settings.py中
REDIS_HOST = 地址
REDIS_PORT = 6379
使用scrapy_redis 组件的调度器
DUPEFILTER_CLASS = 'scrapy.redis.dupefilter.RFPDupeFilter'
在配置共享的管道
'scrapy_redis.pipelines.RedisPipeline' = 400
最后执行爬虫文件
scrapy runspider py文件
开启redis 开启redis客户端 lpush key 起始url

浙公网安备 33010602011771号