主要目标 对 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))