问题抛出:不知为何只抓取前9个数据
本文共有约500字,建议阅读时间5分钟,并且注重理论与实践相结合
觉得文章比较枯燥和用电脑观看的可以点击阅读原文即可跳转到CSDN网页
目录:
一、目标站点分析
二、流程框架
三、爬虫实战
一、目标站点分析
二、流程框架
抓取单页内容:利用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