本文利用requests及正则表达式完成,以文档形式保存,适合练习,成长的路上我们共同加油!!! 如网页访问报错,或者无内容,网站反爬限制,请更换代理或者更换网络IP,进行测试。(关注后,上篇文档有代理分享)
# 1、抓取单页内容 # 利用requests 请求目标站点,得到单个网页的HTML代码, # 2.正则表达式分析 # 利用HTML代码分析得到电影的名称。主演,上映时间。评分,图片连接。 # 3.保存到文件。 # 通过文件的形式将结果保存,每一步电影结果json字符
############ import json import requests import re import urllib3 import json urllib3.disable_warnings() from requests.exceptions import RequestException? # 导入异常处理库 headers = { ??? 'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3' } def get_one_page(url):? # 定义一个函数,获取一页的内容 ??? try: ??????? response = requests.get(url, headers=headers, verify=False) ??????? response.encoding = 'UTF-8'? # 以后爬取显示乱码,添加上 ??????? if response.status_code == 200:? # 判断网页是否读取正常 ??????????? return response.text? # 返回内容 ??????? else: ??????????? return None ??? except RequestException:? # 如果出现异常,就退出 ??????? return None def parse_one_page(html): ??? pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a' ???????????????????????? + '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>' ???????????????????????? + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)? # 编译一个表达式 ??? items = re.findall(pattern, html) ??? for item in items: ???????? yield {'排名': item[0], ??????????????? '图片': item[1], ?????????????? '标题': item[2], ?????????????? '主演': item[3].strip()[3:], ?????????????? '上映时间': item[4].strip()[5:], ?????????????? '评分': item[5] + item[6], } def Write_file(content): ?? with open('E:\猫眼result.txt', 'a', encoding='UTF-8') as f: ?????? f.write(json.dumps(content, ensure_ascii=False) + '\n') ?????? f.close() def main(offet):? # 定义一个函数 ??? url = 'https://maoyan.com/board/4?offset=' + str(offet)? # 定义URL ??? html = get_one_page(url)? # 打印网页内容 ??? parse_one_page(html) ??? for item in parse_one_page(html): ??????? Write_file(item) if __name__ == '__main__': ????? for i? in range(10): ??????????? main(i * 10)
|