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实现方法相关推荐

  1. Python 抓取猫眼电影TOP100数据

    文章目录 1. 利用 requests 库和正则表达式抓取猫眼电影 TOP100 的相关内容 (1)[猫眼电影网址](https://maoyan.com/board/4?offset=0)如下,共1 ...

  2. Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)...

    requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...

  3. 抓取猫眼电影top100

    一.目标 运用requests+正则表达式爬取猫眼电影top100的电影图片.名称.时间.评分等信息,提取站点的url为"http://maoyan.com/board/4",提取 ...

  4. 利用requests库抓取猫眼电影排行

    文章目录 1.抓取目标 2.准备工作 3.抓取分析 4.抓取首页 5.正则提取 6.写入文件 7.整合代码 8.分页爬取 9.运行结果 10.本节代码 最近刚开始了解爬虫,学习了一下基本库的使用.跟着 ...

  5. 爬虫之抓取猫眼电影排行

    一 需求 我们要提取出猫眼电影TOP100的电影名称.时间.评分.图片等信息,提取的站点URL为http://maoyan.com/board/4,提取的结果会以文件形式保存下来. 二 技术手段 利用 ...

  6. Requests与正则表达式抓取猫眼电影排行!

    本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...

  7. Python3网络爬虫实战-27、Requests与正则表达式抓取猫眼电影排行

    本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...

  8. 【Python】Python3网络爬虫实战-27、Requests与正则表达式抓取猫眼电影排行

    本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HT ...

  9. 【Python3网络爬虫开发实战】3-基本库的使用-4抓取猫眼电影排行

    本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容.requests比urllib使用更加方便,而且目前我们还没有系统学习HTML解析库,所以这里就选用正则表达式来作为 ...

最新文章

  1. 毕业设计 基于python的网络爬虫-基于python的网络爬虫
  2. python 字符串前加r b u f 含义
  3. 创业者具备的五大技能_一个优秀创业者必备的基本素质和技能
  4. 105. 七夕祭【环形均分纸牌问题】
  5. 线性回归模型算法原理及Python实现
  6. MAC终端命令学习(入门版)
  7. TSqlConnection
  8. 当世界从移动优先变为AI优先,未来企业竞争将赢在“维度”
  9. 关于python下的mysql数据库查询存储操作
  10. (原创)创建windows域---深入理解域概念
  11. ACWING828 模拟栈
  12. 根据当前节点获取所有上层结构的组织(递归算法)
  13. 40万亿全球最大资管来A股建仓了交易策略竟是这个
  14. android中华为、小米手机设置头像裁剪失败问题
  15. Blog:全民媒体时代的来临?
  16. 实现兼容各浏览器的背景渐变,透明度渐变,色彩渐变
  17. 一年前,没有Android,我还是一个游戏开发者
  18. e580显卡驱动_搭载AMD RX 550独显!联想Thinkpad E580评测:能玩大型游戏的亲民商务本...
  19. 数据结构和算法(四)之链表结构
  20. 360抢夺“度娘”?

热门文章

  1. 073_JS JSON
  2. 在linux中进程表示的是,Linux进程的表示
  3. 用动态数组模拟双向循环链表
  4. Java必刷100题
  5. linux安装成桌面
  6. 第四章 SQL*plus介绍、常用命令
  7. 机器人聊天软件c#_C#制作简易QQ聊天机器人
  8. dll oem证书导入工具_恶意代码分析之反射型DLL注入
  9. html游戏源妈简单,最简单的HTML5游戏——贪吃蛇
  10. php 补足字符串,php 数目字或者字符串补全