问题抛出:不知为何只抓取前9个数据
本文共有约500字,建议阅读时间5分钟,并且注重理论与实践相结合
觉得文章比较枯燥和用电脑观看的可以点击阅读原文即可跳转到优快云网页
目录:
一、目标站点分析
二、流程框架
三、爬虫实战
一、目标站点分析
二、流程框架
抓取单页内容:利用requests请求目标站点得到单个网页的HTML代码,返回结果.
正则表达式分析:根据HTML代码分析得到电影名称、主演、上映时间、评分、图片链接等信息
保存至文件:通过文件的形式将结果保存,每一部电影一个结果一行Json字符串
开启循环及多线程:对多项内容遍历,开启多线程提高抓取速度
三、爬虫实战
需要引入的库
import requests import re from requests.exceptions import RequestException import json from multiprocessing import Pool
获取URL(最好养成加header的习惯,减少被禁访问的可能性)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) '} def get_one_page(url): try: response = requests.get(url,headers = headers) if response.status_code == 200: response.encoding = 'utf-8'#编码问题 return response.text return None except RequestException: return None
关于编码问题我卡了一段时间,后经大神指点只需要添加response.encoding = “utf-8”(这个地方是指原本网页的编码)
匹配过程(保证起始字符串都在)
def parse_one_page(html): pattern = re.compile('<tr class="alt"><td>(\d)</td><td><div align="left">(.*?)</div></td><td>(.*?)</td><td>(.*?)</td><td class="hidden-xs need-hidden indicator5">(.*?)</td>',re.S) items = re.findall(pattern,html) for item in items: yield{'排名':item[0], '学校':item[1], '地方':item[2], '总分':item[3], '指标得分':item[4] }
文件写入
def write_to_file(content): with open('result1.txt','a',encoding = 'utf-8')as f: f.write(json.dumps(content,ensure_ascii =False ) + '/n')#json!!!!! f.close()
主程序设计
def main(): url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html' html = get_one_page(url) for item in parse_one_page(html): print(item)
运行主程序
if __name__ == '__main__': main()
源代码链接:
https://pan.baidu.com/s/1bfh3e165SGDHzpJ-tB9h0Q
密码:6qya