没有合适的资源?快使用搜索试试~ 我知道了~
首页学习python爬虫看一篇就足够了之爬取《太平洋汽车》论坛及点评实战爬虫大全
前言: 这也是一篇毕业论文的数据爬虫,我第一次看见《太平洋汽车》的点评信息时,检查它的网页元素,发现并没有像《汽车之家》那样的字体反爬技术,所有就初步判断它没有很强的反爬虫技术,大不了就使用selenium库自动化实现爬虫呗。但是我确因为这样一个网页写了6种爬虫手段,一直在与它的反爬虫技术对抗,虽然最后我完成了任务,但是感觉并不是很完美,和其他网站的爬虫相比起来,它的运行速度有点慢,也不敢快。就这样收手吧,通过它也学到了很多的知识,如果你也想学习爬虫,这篇文章可以帮你解决90%以上的网页,简单的梳理一下吧,希望对你的学习有所帮助! 文章目录1、最快的30行代码1.1、python库的基础介绍1
资源详情
资源评论
资源推荐
学习学习python爬虫看一篇就足够了之爬取《太平洋汽车》论坛及点评实战爬虫大全爬虫看一篇就足够了之爬取《太平洋汽车》论坛及点评实战爬虫大全
前言: 这也是一篇毕业论文的数据爬虫,我第一次看见《太平洋汽车》的点评信息时,检查它的网页元素,发现并没有像《汽车之家》那样的字体反爬技术,所有就初步判断它没有很强的反爬虫技术,
大不了就使用selenium库自动化实现爬虫呗。但是我确因为这样一个网页写了6种爬虫手段,一直在与它的反爬虫技术对抗,虽然最后我完成了任务,但是感觉并不是很完美,和其他网站的爬虫相比起
来,它的运行速度有点慢,也不敢快。就这样收手吧,通过它也学到了很多的知识,如果你也想学习爬虫,这篇文章可以帮你解决90%以上的网页,简单的梳理一下吧,希望对你的学习有所帮助!
文章目录文章目录1、最快的30行代码1.1、python库的基础介绍1.1.1、requests库1.1.2、time库1.1.3、浏览器代理1.1.4、re库1.1.5、替换 方法1.1.6、CSV库保存数据1.2、爬取网页数据保存思路及代码1.2.1、
分析网页1.2.2、实现思路1.2.3、实现代码2、设置请求时间2.1、timeout方法2.2、eventlet库3、requests + IP代理3.1、如何使用IP代理3.2、如何获取 IP3.3、认识随机数3.4、IP 代理实现源码4、
requests + cookie值4.1、cookie值得获取与转化4.2、使用cookie值请求服务器5、Selenium自动化爬取5.1、自动登录《太平洋汽车》4.2、传入URL爬取信息6、会话请求6.1、如何使用requests提交账号
和密码6.2、源码汇总7、爬取“朗逸”论坛信息7.1、分析论坛首页7.2、爬取论坛首页论题链接7.2.1、如何定位xpath节点7.2.2、代码实现7.3、BeautifulSoup筛选信息7.4、把文本写入txt文件保存7.5、论
坛源码汇总
结果下载:结果下载: https://www.lanzous.com/i9ilkfi
1、最快的、最快的30行代码行代码
1.1、、python库的基础介绍库的基础介绍
我这里一共使用了5个python的基础库,简单的来介绍一下它们
1.1.1、、requests库库
这个是一个请求服务器的库,用于向服务器发出请求,返回结果,如果请求的是网页的URL,返回的则是该网页的HTML,我们要爬取的文字就在其中,直接进行提取就行了。使用前需要进行安装,可
以直接用cmd命令: pip install requests ,使用方法如下:
import requests
html = requests.get('https://baidu.com').text
print (html)
也可以在其中设置它的其他参数:
参数参数 作用作用
url 网页的URL
headers 浏览器参数,代理等,用于模拟浏览器发出请求
data 存放请求时提交的信息
timeout 链接服务器响应的时间,请求不到就结束
proxies
IP代理
… …
重点:重点: 爬虫的目的就是在模拟浏览器向服务器发出请求拿到数据,如果服务器识别你的这个是爬虫程序,就会防止你获取数据,或者给你错误的信息,所以写爬虫是一定要模拟的像服务器一样,防止反
爬虫。
1.1.2、、time库库
这个库主要用于记录时间和设置暂停的时间,之所以要暂停时间是怕访问频率过快被识别这是爬虫程序!
import time
startTime = time.time() #记录起始时间
time.sleep(3) # 暂停3秒钟
endTime = time.time()#获取结束时的时间
useTime = endTime-startTime #结束时间减开始时间等于使用时间
print ("该次所获的信息一共使用%s秒"%useTime)
结果:
该次所获的信息一共使用3.0004384517669678秒
1.1.3、浏览器代理、浏览器代理
((1)自己浏览器的代理)自己浏览器的代理
浏览器代理可以使用自己浏览器的,以谷歌为例:打开网页,鼠标右击——> 检查——> Network——> All ——> headers——> user-agent
设置方式:
headers ={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
}
((2))fake_useragent库库
这个库可以随机生成浏览器代理,可以指定浏览器类型,也可以随机,如随机生成5个谷歌浏览器的 User-Agent :
from fake_useragent import UserAgent
for i in range(5):
headers = {
"User-Agent" : UserAgent().chrome #chrome浏览器随机代理
}
print (headers)
{'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36'}
{'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36'}
{'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36'}
{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36'}
{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36'}
1.1.4、、re库库
re也叫做正则表达式,可以用来匹配需要的内容,对于想快速使用它入门的同学,只需要会 .*? 就可以了,没有括号的 .*? 表示匹配掉,有括号的 (.*?) 表示匹配出来。匹配出网页中的内容,看一个简单的
案例:
为了更方便查看结果,我复制了两次这个文本的源代码,并且改变了其中一个的class标签样式为 ayouleyang 。
匹配方法如下:
import re
#假设一个字符串
str_text = """
阿优乐扬的博客阿优乐扬的博客
一种追求,一种标准,一种态度,一种精神;阿以至优,乐享于扬!
阿优乐扬的博客阿优乐扬的博客
一种追求,一种标准,一种态度,一种精神;阿以至优,乐享于扬!
"""
r1 = re.compile('
(.*?)
') #只取到第一个,注意class="description "
result1 = re.findall(r1, str_text) #在str_text中找到所有符号r1规则的信息
print ("result1 = ", result1)
r2 = re.compile('
(.*?)
') #class中使用了通配符,匹配到两个
result2 = re.findall(r2, str_text)
print ("result2 = ", result2)
结果:
result1 = ['一种追求,一种标准,一种态度,一种精神;阿以至优,乐享于扬!'] result2 = ['一种追求,一种标准,一种态度,一种精神;阿以至优,乐享于扬!', '一种追求,一种标准,一种态度,一种精神;阿以至优,乐享于扬!']
它的结果存放在数组之中,可以直接存放到CSV文件中,上面的方式如果有必要的话,可以先用
1.1.5、替换、替换 方法方法
替换到字符串中可以造成干扰的换行符,制表符和空格,然后再进行匹配信息
str_text = str_text.replace('\r\n', '').replace('\t','').replace(' ','')
1.1.6、、CSV库保存数据库保存数据
这是一个以标点符号分隔数据的文件,默认为 , 分隔,分隔符号也可以自定义,通常不需要设置,使用默认的方法
import csv
#创建CSV文件,并写入表头信息,并设置编码格式为“utf-8-sig”防止中文乱码
fp = open('./test_file.csv','a',newline='',encoding='utf-8-sig') #"./"表示当前文件夹,"a"表示添加
writer = csv.writer(fp) #方式为写入
writer.writerow(('序号','姓名','学号')) #表头
info = ['1', '阿优乐扬', '2017010807'] #内容为数组
writer.writerow((info))
fp.close() #关闭文件
1.2、爬取网页数据保存思路及代码、爬取网页数据保存思路及代码
1.2.1、分析网页、分析网页
在爬取一个网页时,我们必须要确定网页的信息,再选择爬取的方式,可以使用鼠标右击——> 检查 ——> 定位字体,查看是否加密等
分析链接,实现翻页爬取,如朗逸点评的前五个链接别为
https://price.pcauto.com.cn/comment/sg1633/
https://price.pcauto.com.cn/comment/sg1633/p2.html
https://price.pcauto.com.cn/comment/sg1633/p3.html
https://price.pcauto.com.cn/comment/sg1633/p4.html
https://price.pcauto.com.cn/comment/sg1633/p5.html
从它的规律不难看出它的下一个链接,对于第一个链接,我们可以用其他链接的方式,为它加上 p1.html ,在浏览器中查看是否能正常访问,结果是可以的,接下来就可以批量生成链接了。
for page in range(1, 10): #简单生成9个试试,从0开始,不包括10
comment_url = 'https://price.pcauto.com.cn/comment/sg1633/p%s.html'%page
print (comment_url)
结果:
https://price.pcauto.com.cn/comment/sg1633/p1.html
https://price.pcauto.com.cn/comment/sg1633/p2.html
https://price.pcauto.com.cn/comment/sg1633/p3.html
https://price.pcauto.com.cn/comment/sg1633/p4.html
https://price.pcauto.com.cn/comment/sg1633/p5.html
https://price.pcauto.com.cn/comment/sg1633/p6.html
https://price.pcauto.com.cn/comment/sg1633/p7.html
https://price.pcauto.com.cn/comment/sg1633/p8.html
https://price.pcauto.com.cn/comment/sg1633/p9.html
1.2.2、实现思路、实现思路
导入所需要使用的库
获取开始的时间
设置浏览器代理
创建CSV文件并打开写入表头信息
设置需要爬取的页数循环产生其他链接
请求服务器得到HTML
替换掉HTML中的空格,换行,制表符等信息
正则匹配出内容
写入文件保存
关闭文件记录时间
结束
1.2.3、实现代码、实现代码
# 1. 导入所需要使用的库
import requests
import time
import re
import csv
from fake_useragent import UserAgent
startTime = time.time() #2.记录起始时间
headers = {
"User-Agent" : UserAgent().chrome #3.chrome浏览器随机代理
}
#4.创建CSV文件,并写入表头信息
fp = open('./太平洋汽车_速腾轿车.csv','a',newline='',encoding='utf-8-sig')
writer = csv.writer(fp)
writer.writerow(('车主','发表时间','购买车型','购买时间','地点','价格','价格单位','平均油耗', '油耗单位','行驶里程(公里)', '外观评分', '内饰评分', '空间评分', '配置评分', '动力评分', '操控评分', '油耗评分', '舒适评
分', '外观', '内饰', '空间', '配置', '动力', '操控', '油耗', '舒适'))
# 5. 设置需要爬取的页数循环产生其他链接
for page in range(1, 789):# 1, 789
comment_url = 'https://price.pcauto.com.cn/comment/sg1633/p%s.html'%page
#6.请求服务器得到HTML
response = requests.get(url=comment_url, headers=headers).text
#7. 替换掉HTML中的空格,换行,制表符等信息
res_replace = response.replace('\r\n', '').replace('\t','').replace(' ','')
# 8. 正则匹配出内容
r = re.compile('
(.*?)(.*?)发表.*?target="_blank">(.*?)<.*?购买时间(.*?)
.*?购买地点(.*?)
.*?裸车价格(.*?)(.*?)
.*?平均油耗(.*?)(.*?)
.*?行驶里程(.*?)公里
.*?
外观.*?(.*?)
内饰.*?(.*?)
空间.*?(.*?)
配置.*?(.*?)
动力.*?(.*?)
操控.*?(.*?)
油耗.*?(.*?)
舒适.*?(.*?).*?优点:(.*?).*?缺点:(.*?).*?外观:(.*?).*?内饰:(.*?).*?空间:(.*?).*?配置:(.*?).*?动力:(.*?).*?操控:(.*?).*?油耗:(.*?).*?舒适:(.*?)')
re_html = re.findall(r, res_replace)
# 9.写入数据
for index1 in range(len(re_html)):
txt = re_html[index1] writer.writerow(txt)
print ("一共发现%s页,正在爬取第%s页"%(788, page))
fp.close() #10.关闭文件
endTime =time.time()#获取结束时的时间
useTime =(endTime-startTime)/60
print ("该次所获的信息一共使用%s分钟"%useTime)
编辑器运行时截屏:
速度还是很快的,大约一秒钟一个页面,还可以三款车的信息一起爬,毫无压力!!!
这是早上爬取的内容,又要要出门做点事,我就先把代码暂停了,没有接着爬取信息,等我下午来继续运行这个代码是,想不到的事情发生了,这个爬虫程序被识别出来了,一直卡死,陷入假死状
态,只能重启代码,后来直接不能请求网页了… …
2、设置请求时间、设置请求时间
2.1、、timeout方法方法
现在我需要做的事情是如果请求超时,5秒请求失败就放弃,程序就自动结束请求,语法如:
requests.get(url=url, timeout=5)
但是,这个设置在这个程序中并没有用,还是陷入假死状态.
2.2、、eventlet库库
某步超时就跳过
import time
import eventlet #导入eventlet这个模块
eventlet.monkey_patch() #必须加这条代码
with eventlet.Timeout(2,False): #设置超时时间为2秒
print ('这条语句正常执行')
time.sleep(4)
print ('没有跳过这条输出')
print ('跳过了输出')
结果:
这条语句正常执行
跳过了输出
上面的这个代码测试是没有问题的,但是看看在上面的这个代码测试是没有问题的,但是看看在requests中的用法,例如:中的用法,例如:
import requests
import eventlet#导入eventlet这个模块
eventlet.monkey_patch()#必须加这条代码
剩余19页未读,继续阅读
weixin_38524139
- 粉丝: 6
- 资源: 916
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0