既然我们前面学习了概念,那么就一定要动手实践,因为光说不做假把式嘛~
我们爬取的网页以豆瓣电影Top250为例(别问,问就是刚好老师讲的就是...)
爬取的操作一共分成三大部分:
1)爬取网页
2)信息提取
3)信息保存
我们今天先学习爬取网页的操作:
1)访问URL
我们可以看到,我们需要先生成一个list列表,保存浏览器的头部信息,不然的话我们这样不经过任何伪装,豆瓣是不会给我们资源的(因为我们的快速访问也占用了豆瓣服务器的大量资源,这在运营方看来是不可接受的)
2)伪装
所以,我们需要将自己的User-Agent进行伪装,伪装成为不同的浏览器,对于爬取豆瓣来说,这些伪装已经够了.
def askURL(url): #我们最好多找一些浏览器信息,不然容易被查找
#第一个是chrome的
#第二个是火狐的
#后面的都是网上的
agent1="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
agent2="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0"
agent3="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"
agent4="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
agent5="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
agent6="mpatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)"
agent7="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0"
# list1=[agent1,agent2,agent3,agent4,agent5,agent6,agent7]
list1=[agent2]
agent=random.choice(list1)
header={"User-Agent":agent}
request=urllib.request.Request(headers=header,url=url)
try:
response=urllib.request.urlopen(request)
html=response.read().decode('utf-8')
# print(html)
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
return html