Python无法用requests获取网页源码的解决方法
作者:henanlion 发布时间:2023-04-24 07:38:04
最近在抓取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")
来源:https://blog.csdn.net/henanlion/article/details/122757040
猜你喜欢
- MySQL全文索引一种特殊的索引,它会把某个数据表的某个数据列出现过的所有单词生成一份清单。alter table tablename ad
- 测试sql: 代码如下:SET STATISTICS IO ON SET STATISTICS TIME ON SELECT COUNT(1
- 一维列表的初始化:初始一个长度为5的列表方式1:a = [0]*5# [0, 0, 0, 0, 0]方式2:a = [0 for _ in
- 如下所示:两个时间相差一整天,结果却是相差时间为零 !!!!这里是使用错误, .seconds只会计算 小时分钟秒 部分之间的差值在这里使用
- 最近在开发项目的过程中遇到一个问题,就是在插入一条记录的后要立即获取所在数据库中ID,而该ID是自增的,怎么做?在sql server 20
- 假设mysql安装在c:盘,mysql数据库的用户名是root,密码是123456,数据库名是database_name,在d:盘根目录下面
- 除了C/C++以外,我也接触过不少流行的语言,PHP、java、javascript、python,其中python可以说是操作起来最方便,
- 本文实例为大家分享了python封装对象实现时间效果的具体代码,供大家参考,具体内容如下# 钟表import timeclass Clock
- 介绍我们用django在本地调试完了之后,会在服务器上进行部署,如果是大佬那就忽略本文章,如果是萌新对编程命令不太熟悉,那就要用到宝塔了。流
- 前言上一篇文章介绍了怎么配置机器人框架,并且实现了一些简单的功能。(发送私聊或者群聊信息、接收上报的事件、简单的自动回复等等)这次为了让QQ
- 本文介绍了Scrapy项目实战之爬取某社区用户详情,分享给大家,具有如下:get_cookies.pyfrom selenium impor
- pandas.DataFrame中的现有列分配给索引index(行名,行标签)。为索引指定唯一的名称很方便,因为使用loc,at选择(提取)
- 前言Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库。在Python/wxPython环境下
- 在SQL Server中进行开发会让你身处险地,并且寻找快速解决方案。我们编辑了前十名关于SQL Server开发的常见问题。对常见的针对表
- 我们都知道在函数中定义的局部变量在声明他的函数体以及其嵌套的函数内始终是有定义的,并且在函数的作用域链上始终会有个对象指向全局对象,使函数能
- GO类型转换及与C的类型转换类型转换语法dst := float32(src)示例var num int = 520f32 := float
- 一篇关于STR和UNICODE的好文章整理下python编码相关的内容注意: 以下讨论为Python2.x版本, Py3k的待尝试开始用py
- 在一篇文章中看到关于PHP引用的图解,对于加深对PHP引用的理解很有帮助,在这里备份一下。如果你对PHP的引用一点也不了解,可以先看我之前的
- 本文实例为大家分享了PyQt5单行文本框展示的具体代码,供大家参考,具体内容如下QLineEdit 是一个允许输入和编辑纯文本的单行控件。系
- 在我们平时的开发过程中,为了方便调试程序,我们都是打开开发者模式,即Debug=True,当我们正式上线的时候肯定就需要把开发者模式关掉,用