抓取猫眼电影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.text
return None
except 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 Spider 抓取猫眼电影TOP100
""" 抓取猫眼电影TOP100 """ import re import time import requests from bs4 im ...
- Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)
requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...
- 爬虫_python3_抓取猫眼电影top100
使用urllib,request,和正则表达式,多线程进行秒抓,以及异常处理结果: import urllib,re,json from multiprocessing import Pool#多进程 ...
- Requests+正则表达式抓取猫眼电影TOP100
spider.py # -*- coding:utf-8 -*- import requests import re import json import codecs from requests.e ...
- Python爬虫项目--爬取猫眼电影Top100榜
本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...
- # [爬虫Demo] pyquery+csv爬取猫眼电影top100
目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.co ...
- 使用Request+正则抓取猫眼电影(常见问题)
目前使用Request+正则表达式,爬取猫眼电影top100的例子很多,就不再具体阐述过程! 完整代码github:https://github.com/connordb/Top-100 总结一下,容 ...
- Python爬虫【三】利用requests和正则抓取猫眼电影网上排名前100的电影
#利用requests和正则抓取猫眼电影网上排名前100的电影 import requests from requests.exceptions import RequestException imp ...
- python 爬取猫眼电影top100数据
最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...
随机推荐
- Razor基础,视图里如何调用controller里的函数
1.单行代码书写 @代码 2.多行代码书写 @{ //@加个大括号就可以在里面写C#代码了. C#代码第一行 C#代码第二行 } 3.Razor模板引擎会自动判别代码块,但是当代码存在二义性的时候,可 ...
- 2016/1/18 Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 【bzoj4590】[Shoi2015]自动刷题机
因为解一定是单调的,n越小切的题越多,这是可以肯定的,那么直接二分答案 #include<algorithm> #include<iostream> #include<c ...
- 国产手机没有google services 和google play崩溃,判断google services是否存在
public static boolean isGooglePlayServiceAvailable (Context context) { int status = GooglePlayServic ...
- HTTPS数据包抓取的可行性分析
HTTPS数据包抓取的可行性分析 相信只要是从事软件开发, 多多少少都会涉及到数据包的抓取.常见的有网页数据抓取(即网页爬虫),应用程序数据包抓取等.网页数据抓取比较简单, 在chrome下可以非常方 ...
- Create schema error (unknown database schema '')
Andrey Devyatka 4 years ago Permalink Raw Message Hi,Please tell me, can I use the static library in ...
- bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜【贪心||最大流(?)】
洛谷上能过的最大流bzoj上T了--但是贪心做法明明在洛谷上比最大流要慢啊--如果是最大流的话就是裸题了吧 说一下贪心,就按照防晒霜排序,然后对每一个防晒霜选一头可以使用的且r最小的牛 就,没了. 贪 ...
- P2570 [ZJOI2010]贪吃的老鼠
传送门 →_→唯一一篇能看得懂的题解---->这里 很容易想到二分+网络流,然而并没有什么卵用--出题人的思路太神了-- 首先考虑如果一块奶酪在同一时间可以被多只老鼠吃的话,该如何建图.首先不难 ...
- shiro vue 前后端分离中模拟登录遇到的坑
系统采用jeeplus框架(ssm+redis+shiro+mongodb+redis),默认是了JSP未做前后端分离,由于业务需要已经多终端使用的需求(H5.小程序等),需要实现前后端分离.但是由于 ...
- 转发:吐血总结,彻底明白 python3 编码原理
吐血总结,彻底明白 python3 编码原理 写的不错,转发学习一下,侵删.. 原文地址https://zhuanlan.zhihu.com/p/40834093 防止原文看不到了 这里粘贴复制一下: ...