requests.get()获取的网页代码与浏览器源码不一样,怎么解决?

@每天学一点点 2019-02-16 10:27:07
requests.get()获取的网页代码如下图所示

浏览器查看的网页源码如下图所示

我的python代码如下所示(这是一个爬取途牛中银子岩的景点信息的,但是爬取景点名字的时候显示找不到,所以就用下面的代码输出获取到的网页源码,发现获取到的于浏览器看到的不一样,去查了很多的解决方法,补全headers的所有信息,如host、cookies等等,用lxml或html parser进行解析),看网上说浏览器看到的源码中显示的信息,说明该信息不是用js显示的,我看了network中的xhr和js也找不到景点名,说明景点名是静态加载的,但是为什么会发生上面这样的情况呢,怎么获取得到浏览器看到的源码,或者说得到第一张图片这样的源码怎么爬取景点名,我知道用webdriver可以解决这个问题,但是听说webdriver效率比较低,所以想试试其他方法,所以想问问有没有除了webdriver的其他方法去解决这个问题

from bs4 import BeautifulSoup as BS
import requests
import csv
import bs4
import re
from lxml import etree

def get_html(url):
headers={
'Cookie': '_tact=MWJkMmI3MzEtOTQ5ZC1jZjk5LTI1NmUtZTljNmRjYjUxNTYx',#太长了,这里删了一部分cookie的内容
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'}
try:
r=requests.get(url)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r
except:
print('无法连接服务器!!!')

def get_sight_info(url):#采集景点信息
html=get_html(url)
if html=='':
exit()
print(html.text)
print(" ")


def main():
url="http://www.tuniu.com/menpiao/1171#/index"
get_sight_info(url)

main()
...全文
5382 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅帅的橙子 2021-01-28
  • 打赏
  • 举报
回复
引用 3 楼 ieuge 的回复:
[quote=引用 1 楼 帅帅的橙子 的回复:]网页的源代码不是指你这种的,以谷歌浏览器为例。网页真正的源代码是在页面右键倒数第二个的查看网页源代码,你这种检查网页的这种是不对的,因为就算内容是动态加载的也会在这里显示。你这种情况,肯定是在network的xhr里面有的,你刷新页面,去找接口
我也遇到了同样的问题。 request.get之后的text文件内容与右键源码不一样,请求是也加入了headers。 我本来以为是有XHR文件,但不是的,其实是个静态页面。 打印下面的re.status_code返回值是正常的。 加入headers cookie也不管用,能正常运行,但re.text始终和右键源码不一样。 在下面用BS解码后,用find找不到想要的内容。 import requests from bs4 import BeautifulSoup final_url = 'https://pubmed.ncbi.nlm.nih.gov/?term=33302723+33303841+33280092+33273042+33270130+33267884+33269505+33299413+33294382+33334808+33323478+33319467+33319233+33300282&filter=simsearch1.fha&sort=pubdate&size=200' headers={'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36' } re= requests.get(final_url,headers=headers) soup=BeautifulSoup(re.text,'html.parser') content= soup.find('div',class_="search-results-chunks").find_all('div',class_="results-article")[/quote] 我不知道你是怎么写的。我帮你写了一下,我是可以正常获取到源码的。
ieuge 2020-12-28
  • 打赏
  • 举报
回复
引用 1 楼 帅帅的橙子 的回复:
网页的源代码不是指你这种的,以谷歌浏览器为例。网页真正的源代码是在页面右键倒数第二个的查看网页源代码,你这种检查网页的这种是不对的,因为就算内容是动态加载的也会在这里显示。你这种情况,肯定是在network的xhr里面有的,你刷新页面,去找接口
我也遇到了同样的问题。 request.get之后的text文件内容与右键源码不一样,请求是也加入了headers。 我本来以为是有XHR文件,但不是的,其实是个静态页面。 打印下面的re.status_code返回值是正常的。 加入headers cookie也不管用,能正常运行,但re.text始终和右键源码不一样。 在下面用BS解码后,用find找不到想要的内容。 import requests from bs4 import BeautifulSoup final_url = 'https://pubmed.ncbi.nlm.nih.gov/?term=33302723+33303841+33280092+33273042+33270130+33267884+33269505+33299413+33294382+33334808+33323478+33319467+33319233+33300282&filter=simsearch1.fha&sort=pubdate&size=200' headers={'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36' } re= requests.get(final_url,headers=headers) soup=BeautifulSoup(re.text,'html.parser') content= soup.find('div',class_="search-results-chunks").find_all('div',class_="results-article")
帅帅的橙子 2019-02-19
  • 打赏
  • 举报
回复
在network里面就有景点详细的内容的一个接口,怎么可能找不到呢
帅帅的橙子 2019-02-19
  • 打赏
  • 举报
回复
网页的源代码不是指你这种的,以谷歌浏览器为例。网页真正的源代码是在页面右键倒数第二个的查看网页源代码,你这种检查网页的这种是不对的,因为就算内容是动态加载的也会在这里显示。你这种情况,肯定是在network的xhr里面有的,你刷新页面,去找接口

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧