博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法
阅读量:7007 次
发布时间:2019-06-28

本文共 3854 字,大约阅读时间需要 12 分钟。

import requestsimport reimport jsonimport timefrom bs4 import BeautifulSoupfrom pyquery import PyQuery as pqfrom lxml import etree# 获取页面源码def get_one_page(url):    try:        headers = {  # 伪装请求头            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'        }        response = requests.get(url, headers=headers)  # 构造响应        if response.status_code == 200:  # 判断状态码            return response.text        return None    except requests.exceptions.RequestException as r:        return None# 正则表达式提取源码关键信息def parse_one_page(html):    # 正则表达式查询目标信息    pattern = re.compile(        '
.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name">
(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">(.*?).*?fraction">(.*?).*?
', re.S) items = re.findall(pattern, html) for item in items: # 包含yield表达式的函数是特殊的函数,叫做生成器函数(generator function),被调用时将返回一个迭代器(iterator),调用时可以使用next或send(msg)。它的用法与return相似,区别在于它会记住上次迭代的状态,继续执行。 yield{ # 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() }#Xpath提取信息def xpath_demo(html): html=etree.HTML(html) str1='//dd[' for i in range(10): yield{ # yield关键字 'index': html.xpath(str1+str(i)+']/i/text()'), 'image': html.xpath(str1+str(i)+']/a/img[@class="board-img"]/@data-src'), 'title': html.xpath(str1+str(i)+']//p/a[@data-act="boarditem-click"]/text()'), 'actor': ''.join(html.xpath(str1+str(i)+']//p[@class="star"]/text()')).strip(), 'time': html.xpath(str1+str(i)+']//p[@class="releasetime"]/text()'), 'score': ''.join(html.xpath(str1+str(i)+']//p[@class="score"]/i/text()')), }# bs4提取关键信息def bs4_demo(html): soup = BeautifulSoup(html, 'lxml') # pq=PyQuery(html) # for item in pq('dd img/.board-img') for dd in soup.find_all(name='dd'): yield{ 'index': dd.find(name='i', attrs={'class': 'board-index'}).string.strip(),#去掉前后空格 'image': dd.find(name='img', attrs={'class': 'board-img'})['data-src'], 'title': dd.find(name='p', attrs={'class': 'name'}).string.strip(), 'actor': dd.find(name='p', attrs={'class': 'star'}).string.strip(), 'time': dd.find(name='p', attrs={'class': 'releasetime'}).string.strip(), 'score': dd.find(name='i', attrs={'class': 'integer'}).string+dd.find(name='i', attrs={'class': 'fraction'}).string }#pyquery css筛选信息def pyquery_demo(html): doc=pq(html) for dd in doc('dd').items(): yield{ 'index': dd.find('i.board-index').text(),#获取文本 'image': dd.find('img.board-img').attr('data-src'),#获取属性 'title': dd.find('p.name a').text(), 'actor': dd.find('p.star').text(), 'time': dd.find('p.releasetime').text(), 'score': dd.find('p.score i.integer').text()+dd.find('p.score i.fraction').text() }def write_to_file(content): with open('/Users/zz/Desktop/result.txt', 'a', encoding='utf-8') as f: # json.dumps()实现字典的序列化,ensure_ascii=False保证输出非Unicode编码 f.write(json.dumps(content, ensure_ascii=False)+'/n')def main(offset): url = 'https://maoyan.com/board/4?offset='+str(offset) html = get_one_page(url) # for item in parse_one_page(html): #for item in bs4_demo(html): #for item in pyquery_demo(html): for item in xpath_demo(html): print(item) # write_to_file(item) # 写入文件if __name__ == '__main__': # 是否从控制台执行 for i in range(10): main(offset=i*10) time.sleep(1)#避免操作过快被识别

在这里插入图片描述

转载地址:http://xintl.baihongyu.com/

你可能感兴趣的文章
如何使用ABBYY FineReader 12将JPEG文件转换成可编辑文本
查看>>
简单BBS项目开始(一)
查看>>
关于Struts2中提交出现乱码的问题
查看>>
nginx(一)安装
查看>>
Mysql五大引擎之间的区别和优劣之分
查看>>
经典励志对句
查看>>
linux学习笔记——yum安装软件、搭建仓库、rpm命令
查看>>
ESXI6.5创建标准交换机(在vCenter中创建)
查看>>
CollectionUtils简单学习
查看>>
千万级规模高性能、高并发的网络架构经验分享
查看>>
交换机的基本概念和配置
查看>>
longestCommonSubstring
查看>>
关于C#调用大漠插件时提示“{26037A0E-7CBD-4FFF-9C63-56F2D0770214} 的组件时失败”的解决办法...
查看>>
go语言学习--pongo2 fasthttp fasthttprouter pgx
查看>>
Linux Shell sort按照指定的顺序进行排列
查看>>
android Bitmap类方法属性 详细说明
查看>>
我的友情链接
查看>>
China Azure 在HDinsight 中使用Spark 功能
查看>>
sqlserver 2008 R2 审计
查看>>
mysql常用脚本
查看>>