11-13 猫眼电影多线程爬取

问题: pycharm打开项目运行时,运行按钮显灰色,为什么?

	其他项目的 .idea 文件影响导致,关闭项目删除改文件后重启项目就ok

项目练习: 多线程猫眼电影爬取

#多线程猫眼电影爬取
import parsel
import requests
import re


url='https://maoyan.com/board/4?offfset=0'
resp=requests.get(url)
print(resp.text)
sel=parsel.Selector(resp.text) # 将网页变成selector结构

# 提取数据技术方法 三种   xpath css选择器  正则表达式
#  bs4 是一个库,不是一种技术
# 工具有  Python re, lmxl , pyquery , parsel (parsel是一个集成工具,它是scrapy中的selector)

#re 方式
print(sel.re('<p class="releasetime">(.*?)</p>'))
# 利用xpath
print(sel.xpath('//p[@class="releasetime"]/text()').getall())

#使用css方法
print(sel.css('p.realeasetime::text').getall())
# 默认返回的是一个对象 ,getall是将对象提取为信息  文字
print(sel.css()

返回结果为: [] [] [] ,如下图:
在这里插入图片描述

因为遍历得内容不止一部电影的一项内容,所以需要改善:

  for dd in dds:
        #print(sel.re('<p class="releasetime">(.*?)</p>'))
        # 利用xpath
        #print(sel.xpath('//p[@class="releasetime"]/text()').getall())
        #使用css方法
        print(dd.css('p.name a::text').getall()[0])
        print(dd.css('p.star::text').getall().strip())
        print(dd.css('p.realeasetime::text').getall().[0])
        print(join(dd.css('p.score i::text')getall()))

网页原码中标签语言简单认识与应用:
在这里插入图片描述

100部电影的榜单共有十页。第一页时,offset=0,第二页是offset=10,…
则修改代码为:

page= 0 10 20 30 40 50 60 70 80 90 
url='https://maoyan.com/board/4?offset=={}.format(page)'

因为需要用多线程下载爬取,所以:

`def get_info():
	pass
get_info(page)`

又随着page的改变,url会改变,所以我们可以修改page来修改url–
构造url,请求十页数据

for page in random(0,100,10):
	get_info(page)

计算运行时间

import  time

#开始时间-当前时间
#爬虫加速 多线程 进程 协程 
start_time=time.time()
for page in random(0,100,10):
	get_info(page)
print('总共运行时间为:,'time.time()-start_time(),'s',sep=' ')

多线程

def get_info(page):
    url='https://maoyan.com/board/4?offset={}.format(page)'
    resp=requests.get(url)  
    print(resp)
    sel=parsel.Selector(resp.text)
    dds=sel.css('dd')
    for dd in dds:
        print(dd.css('p.name a::text').getall()[0])  #电影名
        print(dd.css('p.star::text').getall().strip())#主演    去除左右两边的空格
        print(dd.css('p.releasetime::text').getall())#上映时间
        print(dd.css('p.score i::text').getall())    #评分


start_time=time.time()
print('开始时间为:',start_time)
for page in range(0,100,10):
    t1=threading.Thread(target=get_info,args=(page,))
    t1.start()
    
print('总线程数',threading.enumerate())
print('总运行时间:',time.time()-start_time,'s',sep=' ')





线程备注

#CPU-同一时刻只能做一件事情,
#python 全局锁 global interpreter lock --GIL
#python全局解释锁(GIL)简单来说就是一个互斥体(或者说锁),这样的机制
	只允许一个线程来控制Python解释器。
#scrapy  框架内置协程

猜你喜欢

转载自blog.csdn.net/weixin_46400833/article/details/109685838