抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法
import requests
import re
import json
import time
from bs4 import BeautifulSoup
from pyquery import PyQuery as pq
from 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.textreturn Noneexcept requests.exceptions.RequestException as r: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表达式的函数是特殊的函数,叫做生成器函数(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)#避免操作过快被识别复制代码
抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法相关推荐
- Python 抓取猫眼电影TOP100数据
文章目录 1. 利用 requests 库和正则表达式抓取猫眼电影 TOP100 的相关内容 (1)[猫眼电影网址](https://maoyan.com/board/4?offset=0)如下,共1 ...
- Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)...
requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...
- 抓取猫眼电影top100
一.目标 运用requests+正则表达式爬取猫眼电影top100的电影图片.名称.时间.评分等信息,提取站点的url为"http://maoyan.com/board/4",提取 ...
- 利用requests库抓取猫眼电影排行
文章目录 1.抓取目标 2.准备工作 3.抓取分析 4.抓取首页 5.正则提取 6.写入文件 7.整合代码 8.分页爬取 9.运行结果 10.本节代码 最近刚开始了解爬虫,学习了一下基本库的使用.跟着 ...
- 爬虫之抓取猫眼电影排行
一 需求 我们要提取出猫眼电影TOP100的电影名称.时间.评分.图片等信息,提取的站点URL为http://maoyan.com/board/4,提取的结果会以文件形式保存下来. 二 技术手段 利用 ...
- Requests与正则表达式抓取猫眼电影排行!
本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...
- Python3网络爬虫实战-27、Requests与正则表达式抓取猫眼电影排行
本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...
- 【Python】Python3网络爬虫实战-27、Requests与正则表达式抓取猫眼电影排行
本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...
- 【Python3网络爬虫开发实战】3-基本库的使用-4抓取猫眼电影排行
本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容.requests比urllib使用更加方便,而且目前我们还没有系统学习HTML解析库,所以这里就选用正则表达式来作为 ...
最新文章
- 毕业设计 基于python的网络爬虫-基于python的网络爬虫
- python 字符串前加r b u f 含义
- 创业者具备的五大技能_一个优秀创业者必备的基本素质和技能
- 105. 七夕祭【环形均分纸牌问题】
- 线性回归模型算法原理及Python实现
- MAC终端命令学习(入门版)
- TSqlConnection
- 当世界从移动优先变为AI优先,未来企业竞争将赢在“维度”
- 关于python下的mysql数据库查询存储操作
- (原创)创建windows域---深入理解域概念
- ACWING828 模拟栈
- 根据当前节点获取所有上层结构的组织(递归算法)
- 40万亿全球最大资管来A股建仓了交易策略竟是这个
- android中华为、小米手机设置头像裁剪失败问题
- Blog:全民媒体时代的来临?
- 实现兼容各浏览器的背景渐变,透明度渐变,色彩渐变
- 一年前,没有Android,我还是一个游戏开发者
- e580显卡驱动_搭载AMD RX 550独显!联想Thinkpad E580评测:能玩大型游戏的亲民商务本...
- 数据结构和算法(四)之链表结构
- 360抢夺“度娘”?