资讯专栏INFORMATION COLUMN

Python无法用requests获取网页源码的解决方法

89542767 / 547人阅读


  其实,我们在工作生活当中,总是会遇到各种各样的困惑的,甚至遇到各种麻烦,一旦遇到这么麻烦问题的话,就会严重的影响到我们的工作效率,比如遇到Python无法用requests获取网页源码的问题,那么,我们该怎么去进行解决呢?下面就给大家详细解答下。


  最近在抓取http://skell.sketchengine.eu网页时,发现用requests无法获得网页的全部内容,所以我就用selenium先模拟浏览器打开网页,再获取网页的源代码,通过BeautifulSoup解析后拿到网页中的例句,为了能让循环持续进行,我们在循环体中加了refresh(),这样当浏览器得到新网址时通过刷新再更新网页内容,注意为了更好地获取网页内容,设定刷新后停留2秒,这样可以降低抓不到网页内容的机率。为了减少被封的可能,我们还加入了Chrome,请看以下代码:


  from selenium import webdriver
  from selenium.webdriver.chrome.options import Options
  from selenium.webdriver.chrome.service import Service
  from bs4 import BeautifulSoup
  import time,re
  path=Service("D:\\MyDrivers\\chromedriver.exe")#
  #配置不显示浏览器
  chrome_options=Options()
  chrome_options.add_argument('--headless')
  chrome_options.add_argument('--disable-gpu')
  chrome_options.add_argument('User-Agent="Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/97.0.4692.99 Safari/537.36')
  #创建Chrome实例。
  driver=webdriver.Chrome(service=path,options=chrome_options)
  lst=["happy","help","evening","great","think","adapt"]
  for word in lst:
  url="https://skell.sketchengine.eu/#result?lang=en&query="+word+"&f=concordance"
  driver.get(url)
  #刷新网页获取新数据
  driver.refresh()
  time.sleep(2)
  #page_source——》获得页面源码
  resp=driver.page_source
  #解析源码
  soup=BeautifulSoup(resp,"html.parser")
  table=soup.find_all("td")
  with open("eps.txt",'a+',encoding='utf-8')as f:
  f.write(f"\n{word}的例子\n")
  for i in table[0:6]:
  text=i.text
  #替换多余的空格
  new=re.sub("\s+","",text)
  #写入txt文本
  with open("eps.txt",'a+',encoding='utf-8')as f:
  f.write(re.sub(r"^(\d+\.)",r"\n\1",new))
  driver.close()


  1.为了加快访问速度,我们设置不显示浏览器,通过chrome.options实现


  2.最近通过re正则表达式来清理格式。


  3.我们设置table[0:6]来获取前三个句子的内容,最后显示结果如下。


  happy的例子


  1.This happy mood lasted roughly until last autumn.


  2.The lodging was neither convenient nor happy.


  3.One big happy family"fighting communism".


  help的例子


  1.Applying hot moist towels may help relieve discomfort.


  2.The intense light helps reproduce colors more effectively.


  3.My survival route are self help books.


  evening的例子


  1.The evening feast costs another$10.


  2.My evening hunt was pretty flat overall.


  3.The area nightclubs were active during evenings.


  great的例子


  1.The three countries represented here are three great democracies.


  2.Our three different tour guides were great.


  3.Your receptionist"crew"is great!


  think的例子


  1.I said yes immediately without thinking everything through.


  2.This book was shocking yet thought provoking.


  3.He thought"disgusting"was more appropriate.


  adapt的例子


  1.The novel has been adapted several times.


  2.There are many ways plants can adapt.


  3.They must adapt quickly to changing deadlines.


  补充:经过代码的优化以后,例句的爬取更加快捷,代码如下:


  from selenium import webdriver
  from selenium.webdriver.chrome.options import Options
  from selenium.webdriver.chrome.service import Service
  from bs4 import BeautifulSoup
  import time,re
  import os
  #配置模拟浏览器的位置
  path=Service("D:\\MyDrivers\\chromedriver.exe")#
  #配置不显示浏览器
  chrome_options=Options()
  chrome_options.add_argument('--headless')
  chrome_options.add_argument('--disable-gpu')
  chrome_options.add_argument('User-Agent="Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/97.0.4692.99 Safari/537.36')
  #创建Chrome实例。
  def get_wordlist():
  wordlist=[]
  with open("wordlist.txt",'r',encoding='utf-8')as f:
  lines=f.readlines()
  for line in lines:
  word=line.strip()
  wordlist.append(word)
  return wordlist
  def main(lst):
  driver=webdriver.Chrome(service=path,options=chrome_options)
  for word in lst:
  url="https://skell.sketchengine.eu/#result?lang=en&query="+word+"&f=concordance"
  driver.get(url)
  driver.refresh()
  time.sleep(2)
  #page_source——》页面源码
  resp=driver.page_source
  #解析源码
  soup=BeautifulSoup(resp,"html.parser")
  table=soup.find_all("td")
  with open("examples.txt",'a+',encoding='utf-8')as f:
  f.writelines(f"\n{word}的例子\n")
  for i in table[0:6]:
  text=i.text
  new=re.sub("\s+","",text)
  with open("eps.txt",'a+',encoding='utf-8')as f:
  f.write(new)
  #f.writelines(re.sub("(\.\s)(\d+\.)","\1\n\2",new))
  if __name__=="__main__":
  lst=get_wordlist()
  main(lst)
  os.startfile("examples.txt")


  到此为止,关于Python无法用requests获取网页源码的问题,就为大家介绍到这里了,希望可以为大家带来更多的帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128059.html

相关文章

  • 手把手教你扩展个人微信号(1)

    摘要:关于本教程有任何建议或者疑问,都欢迎邮件与我联系,或者在上提出教程流程简介教程将会从如何分析微信协议开始,第一部分将教你如何从零开始获取并模拟扩展个人微信号所需要的协议。 现在的日常生活已经离不开微信,难免会生出微信有没有什么API可以使用的想法。 那样就可以拿自己微信做个消息聚合、开个投票什么的,可以显然没有这种东西。 不过还好,有网页版微信不就等于有了API么,这个项目就是出于这个...

    siberiawolf 评论0 收藏0
  • 爬虫问题总结

    摘要:编码我们发现,中有时候存在中文,这是就需要对进行编码。可以先将中文转换成编码,然后使用方法对参数进行编码后传递。 本文档对日常学习中用 python 做数据爬取时所遇到的一些问题做简要记录,以便日后查阅,部分问题可能因为认识不到位会存在一些误解,敬请告知,万分感谢,共同进步。 估算网站规模 该小节主要针对于整站爬取的情况。爬取整站之前,肯定是要先对一个网站的规模进行估计。这是可以使用g...

    nanfeiyan 评论0 收藏0
  • Python 从零开始爬虫(一)——爬虫伪装&反“反爬”

    摘要:总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口要么在网站植入各种反爬机制,让爬虫知难而退。本节内容就着这两种反爬策略提出一些对策。内嵌反爬很灵活,没有什么固定的代码格式,要花时间去分析出来。   之前提到过,有些网站是防爬虫的。其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的。总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口...

    int64 评论0 收藏0
  • 微信网页版登录原理暨查看将自己删除掉人项目

    摘要:项目作用访问项目的网页,扫一扫网页上的二维码,就会显示你的微信好友中将你删除的人的列表。显示参考文档该功能的实现网页微信登录原理项目源码项目源码 项目作用 访问项目的网页,扫一扫网页上的二维码,就会显示你的微信好友中将你删除的人的列表。 在线网址: 访问115.29.55.54:8080/WXApi就可以使用该项目所说的网页 项目原理 在微信中,将你删掉的好友是无法加入你创建的群...

    sean 评论0 收藏0
  • 微信网页版登录原理暨查看将自己删除掉人项目

    摘要:项目作用访问项目的网页,扫一扫网页上的二维码,就会显示你的微信好友中将你删除的人的列表。显示参考文档该功能的实现网页微信登录原理项目源码项目源码 项目作用 访问项目的网页,扫一扫网页上的二维码,就会显示你的微信好友中将你删除的人的列表。 在线网址: 访问115.29.55.54:8080/WXApi就可以使用该项目所说的网页 项目原理 在微信中,将你删掉的好友是无法加入你创建的群...

    sourcenode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<