18508410033 发表于 2020-10-24 18:41:10

关于爬虫用f12查看网页源码和爬虫爬取出来的源码不一样的问题


我开始用的爬虫用的标签是网页源码显示的标签soup.find_all('div',class_="concent ke-cost")这个标签结果找不到任何数据
然后我直接把整个网页爬取下来找到的标签是soup.find_all('div',class_="mui-wpimagetext-item unloaded")。为啥我再网页查看的源码和python读取的源码是完全不同的。那么我平常去爬取网页的时候要怎么来提取标签呢。谢谢大佬解惑

suchocolate 发表于 2020-10-24 18:50:11

审查看到的元素是经过浏览器加载的,有的分支是event触发才加载的,单单发request可能无法加载,你要找到真正拿到数据的那条request,直接去拿数据,不一定要看html。
另外把你的代码发上来,不要图片。

18508410033 发表于 2020-10-24 18:58:47

suchocolate 发表于 2020-10-24 18:50
审查看到的元素是经过浏览器加载的,有的分支是event触发才加载的,单单发request可能无法加载,你要找到真 ...

import requests
from bs4 import BeautifulSoup
import re

findImg = re.compile(r'data-ks-lazyload="(.*?)"')

def askurl():
    head = {
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36'
}
    url = 'https://detail.tmall.com/item.htm?id=556772183225&ali_refid=a3_430583_1006:1151055037:N:DY8nPNoQXxCaUzcW5xAY4EwR15x8pB0i:ad0101273a205b498baa557cde64cb9b&ali_trackid=1_ad0101273a205b498baa557cde64cb9b&spm=a230r.1.14.1'
    request = requests.get(url=url,headers=head)
    html = request.text

    return html

def getData():
    html = askurl()
    soup = BeautifulSoup(html,'html.parser')
    i = 1
    for item in soup.find_all('div',class_="mui-wpimagetext-item unloaded"):
      item = str(item)
      img = re.findall(findImg,item)
      print(img)
getData()



大佬这是我的代码,我没有太看懂您的意思。我想找的是详情图片的链接,你要找到真正拿到数据的那条request,直接去拿数据,不一定要看html这个要咋看呢,我无法通过审查元素找到我需要的标签,那么我的BeautifulSoup要怎么写呢

2269099035 发表于 2020-10-24 19:26:29

不要看element,以network的respone为准。

cdzjf 发表于 2020-10-24 19:32:12

我之前也和你一样,有些是异步加载的,你就需要去搜你的那个字段,去找到真正的html再去发请求,这个有的时候却是很麻烦

suchocolate 发表于 2020-10-24 19:39:35

本帖最后由 suchocolate 于 2020-10-24 19:41 编辑

1.详情图片分支绑定了事件,所以一次get拿不到。

2.图片的链接在另外的一次get中得到的js中,不过这个get请求的参数不知道是如何构建的,省事建议还是用selenium吧。


# 有的参数能从第一个html中得到,有的我也没查到。



3.你可以直接用requests拿到这个js:
import requests

url = 'https://aldcdn.tmall.com/recommend.htm?itemId=556772183225&categoryId=50008612&sellerId=3249953402&shopId=255372786&brandId=3229901&refer=&brandSiteId=0&rn=&appId=03054&isVitual3C=false&isMiao=false&count=12&callback=jsonpAld03054'
headers = {'user-agent': 'firefox'}
r = requests.get(url, headers=headers)
print(r.text)



18508410033 发表于 2020-10-25 20:50:02

2269099035 发表于 2020-10-24 19:26
不要看element,以network的respone为准。

请问下在network里面我要怎么才能确定我需要的东西在哪个链接里面呢。感觉有超级多的链接

18508410033 发表于 2020-10-25 20:57:30

suchocolate 发表于 2020-10-24 19:39
1.详情图片分支绑定了事件,所以一次get拿不到。

2.图片的链接在另外的一次get中得到的js中,不过这个ge ...

我的审查元素怎没有看到有事件的标志呢


还有那个您在network去找的链接,在那么多的东西里面您是怎么知道自己需要的是哪个链接呢

suchocolate 发表于 2020-10-25 21:43:35

18508410033 发表于 2020-10-25 20:57
我的审查元素怎没有看到有事件的标志呢




我的是比较新的firefox,google好像没有event的提示。
主要找html,xhr,最后是js。

18508410033 发表于 2020-10-25 22:30:46

suchocolate 发表于 2020-10-25 21:43
我的是比较新的firefox,google好像没有event的提示。
主要找html,xhr,最后是js。

好的 谢谢大佬
页: [1]
查看完整版本: 关于爬虫用f12查看网页源码和爬虫爬取出来的源码不一样的问题