目前使用Request+正则表达式,爬取猫眼电影top100的例子很多,就不再具体阐述过程!

完整代码github:https://github.com/connordb/Top-100

总结一下,容易出错的问题有:

 1.没有加请求头,导致输出没有具体信息!

headers={
"User-Agent": "Mozilla / 5.0(Windows NT 6.1) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 67..3396.99 Safari / 537.36"
}
2.正则出问题:

这个没有好的办法,只能写一点,然后打印输出,看看是否正确输出,常见的问题:另起一行要有+号;另起一行的时候头尾要有引号;
具体要抓取的内容要用();
pattern=re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?title="(.*?)".*?star">(.*?)</p>.*?setime">(.*?)</p>'
+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>',re.S) 3.写入文件出现问题:

在写入文件的时候,当你输入f.write(content)会报错,报错内容显示只能写入字符串格式,而不是字典格式,此时解决办法是写入

f.write(json.dumps(conten))
当你成功输出数据时,发现没有换行,此时加入换行符
f.write(json.dumps(conten)+'/n')
当你成功输出数据时,发现汉字没有显示出来,此时需要把with open('maoyan.txt','a')改为

with open('maoyan.txt','a',encoding='utf-8'),
f.write(json.dumps(conten))改为f.write(json.dumps(conten,ensure_ascii=False))

数据输出保存成功!

接下来我们比较一下加多进程的好处:
#!/usr/bin/python
# -*- coding:<utf-8> -*-
import requests
import time
from requests.exceptions import RequestException
import re
import json def get_one_page(url):
try:
headers={
"User-Agent": "Mozilla / 5.0(Windows NT 6.1) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 67..3396.99 Safari / 537.36"
}
response=requests.get(url,headers=headers)
if response.status_code==200:
return response.text
return None
except RequestException:
return None
def parse_one_page(html):
pattern=re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?title="(.*?)".*?star">(.*?)</p>.*?setime">(.*?)</p>'
+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>',re.S)
items=re.findall(pattern,html)
#print(items)
for item in items:
yield{
'index':item[0],
'name':item[1],
'actor':item[2].strip()[3:],
'date':item[3].strip()[5:],
'grade':item[4]+item[5]
}
def write_to_file(content):
with open('maoyan1.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
f.close
def main(offset):
url='http://maoyan.com/board/4?offset='+str(offset)
html=get_one_page(url)
parse_one_page(html)
for item in parse_one_page(html):
print(item)
write_to_file(item)
#print(html) if __name__ == '__main__':
start=time.time()
for i in range(10):
main(i*10)
end=time.time()
print('运行时间:',end-start)

 输出结果为:运行时间: 1.7671008110046387

    当加入多进程以后:

#!/usr/bin/python
# -*- coding:<utf-8> -*-
import requests
import time
from requests.exceptions import RequestException
import re
import json
from multiprocessing import Pool def get_one_page(url):
try:
headers={
"User-Agent": "Mozilla / 5.0(Windows NT 6.1) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 67..3396.99 Safari / 537.36"
}
response=requests.get(url,headers=headers)
if response.status_code==200:
return response.text
return None
except RequestException:
return None
def parse_one_page(html):
pattern=re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?title="(.*?)".*?star">(.*?)</p>.*?setime">(.*?)</p>'
+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>',re.S)
items=re.findall(pattern,html)
#print(items)
for item in items:
yield{
'index':item[0],
'name':item[1],
'actor':item[2].strip()[3:],
'date':item[3].strip()[5:],
'grade':item[4]+item[5]
}
def write_to_file(content):
with open('maoyan1.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
f.close
def main(offset):
url='http://maoyan.com/board/4?offset='+str(offset)
html=get_one_page(url)
parse_one_page(html)
for item in parse_one_page(html):
print(item)
write_to_file(item)
#print(html) if __name__ == '__main__':
start=time.time()
# for i in range(10):
# main(i*10)
pool=Pool()
pool.map(main,[i*10 for i in range(10)])
end=time.time()
print('运行时间:',end-start)
#main()

此时输出结果:运行时间: 1.0980627536773682

所以:

不加多进程运行时间: 1.7671008110046387,加多进程运行时间:1.0980627536773682

因此加了进程池以后,大大提高了代码运行速度!

 

使用Request+正则抓取猫眼电影(常见问题)的更多相关文章

  1. Python爬虫【三】利用requests和正则抓取猫眼电影网上排名前100的电影

    #利用requests和正则抓取猫眼电影网上排名前100的电影 import requests from requests.exceptions import RequestException imp ...

  2. (python3爬虫实战-第一篇)利用requests+正则抓取猫眼电影热映口碑榜

    今天是个值得纪念了日子,我终于在博客园上发表自己的第一篇博文了.作为一名刚刚开始学习python网络爬虫的爱好者,后期本人会定期发布自己学习过程中的经验与心得,希望各位技术大佬批评指正.以下是我自己做 ...

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

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

  4. Python Spider 抓取猫眼电影TOP100

    """ 抓取猫眼电影TOP100 """ import re import time import requests from bs4 im ...

  5. 爬虫基本库request使用—爬取猫眼电影信息

    使用request库和正则表达式爬取猫眼电影信息. 1.爬取目标 猫眼电影TOP100的电影名称,时间,评分,等信息,将结果以文件存储. 2.准备工作 安装request库. 3.代码实现 impor ...

  6. 利用request和re抓取猫眼电影排行

    import requests import re import time def get_one_page(url): headers = { 'User-Agent': 'Mozilla/5.0 ...

  7. python抓取猫眼电影列表

    抓取地址:http://maoyan.com/board/4 分析url分页规则:http://maoyan.com/board/4?offset=0 其中offset参数值为0到90 用到的库: P ...

  8. 抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法

    import requests import re import json import time from bs4 import BeautifulSoup from pyquery import ...

  9. requests+正则爬取猫眼电影前100

    最近复习功课,日常码农生活. import requests from requests.exceptions import RequestException import re import jso ...

随机推荐

  1. Incorrect key file for table错误解决方法

    问题现象: alter table portal_app_xxxx_xxx add devno varchar(64) NOT NULL DEFAULT '' COMMENT '设备机编',add s ...

  2. CVE-2012-0158 分析

    目录 CVE-2012-0158 分析&利用 1.实验环境 2.下载poc样本 3.调试并找到漏洞触发点 4.分析漏洞触发模块及流程 5.漏洞利用 6.总结 7.参考资料 CVE-2012-0 ...

  3. Linux下键盘值 对应input_evnet的code值。

    最近做了一个linux下面的模拟鼠标和键盘的app,但不是很清楚字符对应的键值:查找内核源码,在kernel/include/uapi/linux/input.h文件中找到: 下面给出普通键盘上面对应 ...

  4. ctf学习(web题二)

    web 下面是做bugku上一些web的总结 内容链接

  5. Linux 小知识翻译 - 「虚拟化技术 续」

    这次,继续聊聊「虚拟化技术」. 根据上回的介绍,虚拟化技术可以使「计算机的台数和运行的OS的个数的比例不再是1:1」.这回介绍一下如何使用这个技术. 使用方法之一,「一台计算机上运行多个OS」.从个人 ...

  6. Unity Shader 基础(4) 由深度纹理重建坐标

    在PostImage中经常会用到物体本身的位置信息,但是Image Effect自身是不包含这些信息的,因为屏幕后处其实是使用特定的材质渲染一个刚好填满屏幕的四边形面片(四个角对应近剪裁面的四个角). ...

  7. android开发——用户头像

    最近,小灵狐得知了一种能够加快修炼速度的绝世秘法,那便是修炼android神功.小灵狐打算用android神功做一个app,今天他的修炼内容就是头像功能.可是小灵狐是个android小白啊,所以修炼过 ...

  8. win21api、win32gui、win32con三个模块操作系统窗口时一些小技巧

    下面这段脚本是操作一个浏览器上弹窗,打开文件窗口,由于脚本 执行速度快,当时未添加第2行的延时时,脚本顺利的执行成功,但弹的窗却没有进行操作,建议后续如果脚本执行到打开弹窗时,延时个几秒再去操作所弹窗 ...

  9. Linux 简介(day1)

    一.Linux 诞生于1991年 二.创始人:林纳斯.托瓦茨(Linus Torvalds) 三.logo:企鹅 四.Linux完整系统包括 1.Linux kernel (Linux 内核) 2.f ...

  10. 学习Ant Design Pro的一点心得

    1.控制反转(Inversion of Control)是一种「思想」,依赖注入(Dependency Injection)则是这一思想的一种具体「实现方式」 2.react 要注意全局 id相同 3 ...