您好,感谢您的帮助,
我一直使用Python和Newspaper3k来抓取网站,但我注意到有些函数是...well的……不起作用。特别是,我只能抓取大约1/10甚至更少的站点的HTML这篇文章。下面是我的代码:
from newspaper import Article
url = pageurl.com
article = Article(url, keep_article_html = True, language ='en')
article.download()
article.parse()
print(article.title + "\n" + article.article_html)发生的情况是文章的标题是已抓取,根据我的经验,100%的情况下,文章HTML很难成功已抓取,则不返回任何内容。我知道Newspaper3k是基于BeautifulSoup的,所以我也不希望它能工作,所以我有点卡住了。有什么想法吗?
编辑:我尝试抓取的大多数网站都是西班牙语的
发布于 2020-07-17 13:48:08
所以我没有发现太多的问题,刮健康-spain.com与美丽的汤..这个网站没有那么多的javascript。这可能会导致HTML解析器出现问题,所以当你抓取网站时,你应该注意,在抓取之前,关闭javascript来查看你的浏览器得到了什么输出。
您没有具体说明您需要该网站的哪些数据,所以我做了一个有根据的猜测。
import requests
from bs4 import BeautifulSoup
url = 'http://www.wellness-spain.com/-/estres-produce-acidez-en-el-organismo-principal-causa-de-enfermedades#:~:text=Con%20respecto%20al%20factor%20emocional,produce%20acidez%20en%20el%20organismo'
html = requests.get(url)
soup = BeautifulSoup(html.text,'html.parser')
title = soup.select_one('h1.header-title > span').get_text().strip()
sub_title = soup.select_one('div.journal-content-article > h2').get_text()
author = soup.select_one('div.author > p').get_text().split(':')[1].strip()我们对请求使用get方法来获取HTTP响应。美丽的汤,需要回应.text。你会经常看到html.content但这是二元响应,所以不要使用它。HTML解析器只是一个漂亮的解析器,用来正确解析html。
然后我们使用CSS选择器来选择您想要的数据。在我们使用的变量标题中select_one它只会选择元素列表中的一个元素,因为有时CSS选择器会为您提供一个HTML标签列表。如果你不了解CSS选择器,这里有一些参考资料。
本质上,我们在title变量中指定html标记,.表示类名,因此h1.header-title将获取带有类header- h1的html标记标题。The >将您定向到H1的直接子元素,在本例中,我们需要span元素,即h1的子元素。
同样在title变量中,我们有get_text()方法从html标记中获取文本。然后,我们使用字符串剥离方法剥离空白字符串。
类似于sub_标题变量我们获取类名为journal-content- text的div元素,我们获取直接的子html标记h2并获取它的文本。author变量,我们选择类名author的div并获得直接子p标记。我们正在抓取文本,但底层文本有autor: NAME因此,使用拆分字符串方法,我们将字符串拆分成一个包含两个元素的列表,autor和NAME,然后我选择了列表中的第二个元素,然后使用字符串方法条带,去掉了其中的任何空格。
如果你在抓取特定网站时遇到问题,最好提出一个新的问题,并向我们展示你尝试过的代码,你的特定数据需求是什么,尽量做到这一点。该URL帮助我们指导您让您的刮刀工作。
https://stackoverflow.com/questions/62943152
复制相似问题