问题: 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 框架内置协程