python学习实践--爬取猫眼电影排行
爬取前一定要注意观察网站的url地址,如果是分页的话,找出每一页不同的地址规律,同时,尽量在network选项卡部分查看网页源代码,否则源码可能经过JavaScript操作与原始请求不同。
抓取站点
首先获取网页的源代码
import requests
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
response=requests.get(url,headers=headers)
#检测得到的网页源代码是否正确
print(response.txt)
if response.status_code==200:
return response.text
return none
正则提取
def parse_one_page(html):
#提取的是排名,图片网址,题目,演员,上映时间,评分。
#建议先自己写一遍
pattern = re.compile(
'<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*? alt=.*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',re.S
)
items = re.findall(pattern,html)
for item in items:
yield {
'index': item[0],
'image': item[1],
'title': item[2].strip(),
'actor': item[3].strip()[3:] if len(item[3]) > 3 else '',
'time': item[4].strip()[5:] if len(item[4]) > 5 else '',
'score': item[5].strip() + item[6].strip()
}
写入文件
def write_to_file(content):
with open('result.txt','a',encoding='utf-8') as f:
f.write(json.jumps(content,ensure_ascii=False)+'\n')
主函数调用及分页爬取
def main(offset):
url='http://maoyan.com/board/4?offset='+str(offset)
html = get_one_page(url)
for item in parse_one_page(html):
write_to_file(item)
if __name__=='__main__':
for i in range(10):
main(offset=i*10)
将上面代码进行整合,便可以得到结果
(以上参考书籍《Python 3网络爬虫开发实战》)
这个例子,比较简单,大家可以自己找一个网站进行爬取练习,比如我就找了一个小说网站,嘿嘿,过程跟这个虽然有点不一样,但是最终还是成功了,下次再整理。