樊敬礼 发表于 2021-1-7 16:31:58

女神吧

为什么'user-agent'爬不出贴吧图片,写成'uesr-agent'能爬出

小甲鱼 发表于 2021-1-7 16:39:02

'uesr-agent' 肯定是拼写错误的,如果拼写错误能够正常爬取,那么说明服务器是不需要你指定 'user-agent'。

樊敬礼 发表于 2021-1-7 16:52:42

小甲鱼 发表于 2021-1-7 16:39
'uesr-agent' 肯定是拼写错误的,如果拼写错误能够正常爬取,那么说明服务器是不需要你指定 'user-agent'。

那为啥拼写正确爬不出来

suchocolate 发表于 2021-1-7 17:11:09

樊敬礼 发表于 2021-1-7 16:52
那为啥拼写正确爬不出来

你把你的代码贴出来吧

樊敬礼 发表于 2021-1-7 17:30:07

suchocolate 发表于 2021-1-7 17:11
你把你的代码贴出来吧

import urllib.request
import re

def open_url(url):
    req = urllib.request.Request(url)
    req.add_header('Uesr-Agent','Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36')
    page = urllib.request.urlopen(req)
    html = page.read().decode('utf-8')

    return html

def get_img(html):
    p = r'<img class="BDE_Image" src="([^"]+\.jpg)"'
    imglist = re.findall(p,html)

    for each in imglist:
      filename = each.split("/")[-1]
      urllib.request.urlretrieve(each,filename,None)

if __name__ == '__main__':
    url = "https://tieba.baidu.com/p/7113849191"
    get_img(open_url(url))

z5560636 发表于 2021-1-7 17:56:41

樊敬礼 发表于 2021-1-7 17:30
import urllib.request
import re



能下啊..

C:\Users\ccd\AppData\Local\Programs\Python\Python36\python.exe D:/ccd_test/text.py
http://tiebapic.baidu.com/forum/w%3D580/sign=46a7b672b68b87d65042ab1737092860/89d24734970a304ed0a4a4b9c6c8a786c8175c38.jpg
89d24734970a304ed0a4a4b9c6c8a786c8175c38.jpg

suchocolate 发表于 2021-1-7 18:29:45

樊敬礼 发表于 2021-1-7 17:30
import urllib.request
import re



ua随便写写,不用原来那么长的内容试试。
req.add_header('User-Agent', 'xxxx')

Daniel_Zhang 发表于 2021-1-7 19:05:15

就很奇怪,加了一行就跑出来了
import ssl 然后第五行重写一下?

import urllib.request
import re, ssl

def open_url(url):
    ssl._create_default_https_context = ssl._create_unverified_context
    req = urllib.request.Request(url)
    req.add_header('Uesr-Agent','Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36')
    page = urllib.request.urlopen(req)
    html = page.read().decode('utf-8')

    return html

def get_img(html):
    p = r'<img class="BDE_Image" src="([^"]+\.jpg)"'
    imglist = re.findall(p,html)

    for each in imglist:
      
      filename = each.split("/")[-1]
      print(filename)
      urllib.request.urlretrieve(each,filename,None)

if __name__ == '__main__':
    url = "https://tieba.baidu.com/p/7113849191"
    get_img(open_url(url))

你真的确定你不是看错了文件夹,没找到那张图导致的吗{:10_245:}

樊敬礼 发表于 2021-1-9 13:47:53

写成uesr-agent或者req.add_header('Uesr-Agent','Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36')这一句删掉都能爬出来,唯独写成user-agent爬不出来

YunGuo 发表于 2021-1-9 15:34:55

本帖最后由 YunGuo 于 2021-1-9 15:53 编辑

这个是百度贴吧对user-agent的判断问题。
百度的ua判断js代码是:判断ua中如果包含 “Android” 或 “Adr”,就不会返回正常页面,否则返回正常。
而你设置的ua本质上是没有设置成功的,因为ua拼写错误,所以实际上urllib在请求的时候使用的ua是默认的“Python-urllib/3.X”(python请求库和版本)。
百度ua判断代码无法获取到你设置的ua(拼写错误),你设置的ua会被当做自定义请求头;百度获取到的ua是默认的ua,但这个判断只判断“Android” 或 “Adr”,而默认ua符合要求,不存在这两个字符串。所以可以返回正常页面。

总结起来就是:
当你拼写错误的时候,ua使用的是默认ua,百度获取到的也是默认ua,默认ua中不包含 “Android” 或 “Adr”字符串,此时返回正常页面;
当你拼写正确的时候,ua使用的就是你定义的ua,百度获取到的就是你定义的ua,而你定义的ua中包含“Android”,此时返回错误页面。
页: [1]
查看完整版本: 女神吧