感谢各位大神的帮助哈哈哈
本文共有约500字,建议阅读时间5分钟,代码较多,请注重理论与实践相结合
觉得文章比较枯燥和用电脑观看的可以点击阅读原文即可跳转到CSDN网页
目录:
一、目标站点分析
二、流程框架
三、爬虫实战
四、结果输出
一、目标站点分析
(最好大学网:http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html)
二、流程框架
抓取单页内容:利用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”(这个地方是指原本网页的编码)
匹配过程(保证起始字符串都在)
经大神指点之后发泄原来是只需要在原本(/d)的基础改成(/d*)
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/1HBLxWlfAp5iOzMREWGrcDg
密码:d904