1.1学习get与post请求
学习目标:
-
学习get与post请求,尝试使用requests或者是urllib用get方法向https://www.baidu.com/发出一个请求,并将其返回结果输出。
-
如果是断开了网络,再发出申请,结果又是什么。了解申请返回的状态码。
-
了解什么是请求头,如何添加请求头。
import requests #字典格式 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'} url = 'https://www.baidu.com/' response = requests.get(url=url,headers=headers) #指定编码格式为utf-8,避免出现乱码 response.encoding = 'utf-8' #以文本的形式打印网页源码 print(response.text) #以字节流的形式打印网页源码 print(response.content) #打印响应头 print(response.headers) #查看网页编码格式 print(response.encoding)
1.2正则表达式
学习目标:
-
学习什么是正则表达式并尝试一些正则表达式并进行匹配。
-
然后结合requests、re两者的内容爬取https://movie.douban.com/top250里的内容
-
要求抓取名次、影片名称、年份、导演等字段。
-
参考资料: https://desmonday.github.io/2019/03/02/python爬虫学习-day2正则表达式/
def movie(url): #增加请求头,防止被认为是爬虫 headers = { 'User-Agent': 'Mozilla/5.0 (Windows ' 'NT 10.0; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'} result = requests.get(url=url,headers=headers) #正则匹配电影名次 rank = re.findall('<em class="">(.*?)</em>',result.text,re.S) # print(rank) #正则匹配电影名称,[\u4e00-\u9fa5]用于匹配中文字符串 name = re.findall('<span class="title">([\u4e00-\u9fa5]+)</span>',result.text,re.S) # print(name) #正则匹配电影国家 country = re.findall(' / ([\u4e00-\u9fa5]+) / ',result.text,re.S) # print(country) #正则匹配电影导演 texts = re.sub('导演:',"",result.text) #将导演字符串替换成空,再用正则匹配 directs = re.findall('<p class="">(.*?) ',texts,re.S) # print(directs) #正则匹配评分 scores = re.findall('<span class="rating_num" property="v:average">(.*?)</span>',result.text,re.S) # print(scores) #zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 for rank,name,country,directs,scores in zip(rank,name,country,directs,scores): print(rank,name,country,directs,scores) if __name__ =="__main__": for i in range(0, 100, 25): url = 'https://movie.douban.com/top250?start={}&filter='.format(i) movie(url)