爬取斗鱼图片

主要目标 对 xpath 在 lxml 中的应用
遇到的问题 : 1. 但是发现 图片的链接 不在 网页源代码中 而是以json形式存储
对于json模式的数据处理 还有其他的模式,目前我还没学到嗷,也很期待
2.斗鱼的版块 url 有些是 大写 有些为小写 我不太懂
3.好像采用requests库 不需要对json数据 进行解析 我也不知道为什么 好神奇哦
这个是request 的

from urllib import request
from lxml import html
import random
import re
import gzip
def ungzip(data):
    try:
        data=gzip.decompress(data)
    except:
        pass
    return data     #对json数据处理   可以得到其中的数据  类型为str  便可以用正则找到需要的内容
try:
    name=input("请输入需要查取板块的首字母:")    #对于大小写 我还是不太会 还是要自己看斗鱼网站url 各个模块的大小
    url='https://www.douyu.com/g_'+name
    uas=[
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.3 Safari/537.36",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 Core/1.47.277.400 QQBrowser/9.4.7658.400",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
    ]     #这里建立了一个use-agent 池    也想建立一个ip池的 有点懒就算了
    ua=random.choice(uas)
    header={'user-agent':ua}
     res=request.Request(url,headers=header)
    resp=request.urlopen(res)
    #print(res)
    txt=ungzip(resp.read()).decode('utf-8')           #解析json文件
    #print(txt)  
    text=html.etree.HTML(txt)              
     #我这里是对提取的网页源代码 进行html格式化   因为xpath  好像只能在  html格式下才能运用  而 txt中的内容 类型是str   
    zbname=text.xpath('//ul/li//a/div[2]/div[2]/h2/div/text()')    #这里也可以直接在json 解析后的内容用正则提取主播名字
    #print(zbname)
    pat='"rs1":"(.*?)"'
    picturelink=re.compile(pat).findall(txt)
    #print(picturelink)
    for i in range(0,len(picturelink)+1):
        link=picturelink[i]
        localsfile='F:\\一个项目\\一个项目2\\斗鱼图片\\'+zbname[i]+'.jpg'
        request.urlretrieve(link,localsfile)
        print('已成功'+str(i)+'张')
except Exception as err:
    pass

这个是request的

#requests 版本    好像 requests  爬取下来就直接是str 不需要解析json数据  爬取下来的就是数据类型 就是 str
import requests
import random
import re
import time
name=input("请输入需要查取板块的首字母:")    #对于大小写 我还是不太会 还是要自己看斗鱼网站url 各个模块的大小
url='https://www.douyu.com/g_'+name
uas=[
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.3 Safari/537.36",            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 Core/1.47.277.400 QQBrowser/9.4.7658.400",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
    ]
ua=random.choice(uas)
headers={'user-agent':ua}
ips = [
            "34.203.248.159:80",
            "140.82.42.10:80",
            "34.203.248.159:80",
            "136.243.254.196:80"
        ]
ip=random.choice(ips)                                        
proxy={'http':ip}                                            
txt=requests.get(url,headers=headers,proxies=proxy)          
print(txt.text)
pat='"rs1":"(.*?)"'                                          
pat1='"nn":"(.*?)"'
resp=re.compile(pat).findall(txt.text)                       
resp1=re.compile(pat1).findall(txt.text)
#print(resp)                                                 
print(len(resp1))
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值