Python爬虫(二)
2018-09-24 本文已影响4人
一路向前_莫问前程_前程似锦
爬虫搭档 urllib+bs4+re
urllib基础
要系统学习urllib模块,我们从urllib基础开始。这个知识点中,urlretrieve()、urlcleanup()、info()、getcode()、geturl()等
urlretrieve() 直接将网页爬取到本地
urlcleanup() 清除urlretrieve()产生的缓存
post与get两种请求方式,自动模拟http请求
比如登陆、搜索某些信息的时候会用到
get请求表示的自动模拟搜索,比如百度关键词搜素
post请求表示自动模拟登陆
搜索的关键字为中文时,我们需要quote一下
get请求和post需要Request一下
post请求需要用到urllib.prase模块
构建表单数据(在http://www.iqianyue.com/mypost实验)查看源代码,发现name属性值为“name”,密码对应的输入框中,name属性值为“pass”。因此构建表单的数据中要包含两个字段,字段名为“name”,“pass”,字段值设置成对应的需要传递的值。格式为字典:
{字段名1:字段值1,字段名2:字段值2,...}
代码:
import urllib.request
import urllib.parse
url = "http://www.iqianyue.com/mypost"
postdata = urllib.parse.urlencode({
"name":"213161836",
"pass":"15713927150yzxc"
}).encode("utf-8") #将数据使用urlencode编码后,使用encode()设置utf-8编码
req = urllib.request.Request(url,postdata)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safri/537.36")
data = urllib.request.urlopen(req).read().decode("utf-8","ignore")
print(data)
403 需要伪装
浏览器伪装技术原理
我们可以试试爬取csdn博客,我们发现会返回403,因为对方服务器会
对爬虫进行屏蔽。此时,我们需要伪装成浏览器才能爬取。
浏览器伪装
我们一般通过报头进行
由于urlopen()对于一些HTTP的高级功能不支持,所以,我们如果要修
改报头,可以使用urllib.request.build_opener()进行,当然,也可以
使用urllib.request.Request()下的add_header()实现浏览器的模拟。
我们重点讲前者方法,后者方法是否掌握无所谓,