Python 从网页上刮擦
在用Scrapy创建蜘蛛时,我遇到了一些我似乎无法克服的问题Python 从网页上刮擦,python,scrapy,Python,Scrapy,在用Scrapy创建蜘蛛时,我遇到了一些我似乎无法克服的问题 for quote in response.css('div.entry-content'): yield { 'title': quote.css('h3.widget-title::text').extract_first(), 'text': quote.css('div p::text').extract_first(), 这就是我想要提取的内容,因此从di
for quote in response.css('div.entry-content'):
yield {
'title': quote.css('h3.widget-title::text').extract_first(),
'text': quote.css('div p::text').extract_first(),
这就是我想要提取的内容,因此从div.panel-layout
中获取p
和标题,但是一旦p
达到strong
或所述p
中的任何内容,该页面的刮擦结束
举一个(文本)例子
The class **LocalTime**
在此之后,爬行器在遇到LocalTime作为strong
后结束活动
我尝试过添加p::text strong::text
,但似乎没有解决这个问题。我将如何解决上述问题,建议和提示非常感谢
Edit1:我通过从p::text
中删除::text
部分地解决了这个问题,但是现在它给了我里面所有东西的代码,如下类LocalTime
我不知道我是否正确理解你。
您希望刮除“p”标记而不刮除“strong”标记吗?
如果是这样的话,这是不可能的-您应该使用正则表达式来删除它。
像这样:
re.findall(r'>(.+?)<', "<p> The class <strong>LocalTime</strong> ... </p>")
re.findall(r'>(.+?)我不知道我是否理解正确。
您希望刮除“p”标记而不刮除“strong”标记吗?
如果是这样的话,这是不可能的-您应该使用正则表达式来删除它。
像这样:
re.findall(r'>(.+?)<', "<p> The class <strong>LocalTime</strong> ... </p>")
re.findall(r'>(.+?)您可以使用类似的东西(XPathstring()
函数):
您可以使用类似的方法(XPathstring()
function):
你能提供一个你正试图抓取的网页的URL和你想从中提取的数据吗?这只是一个抓取的测试,我根本不认为这是其他任何东西。你能发布你正在抓取的网页或你正在挣扎的整个html位吗?你能提供一个你正试图抓取的网页的URL和数据吗你想从中提取数据吗?这只是一个刮取测试,我根本没有把它看作是其他任何东西。你能发布你正在刮取的网页或你正在挣扎的整个html位吗?我希望包括它,因为在我的问题中,它没有出现,它在达到strong
时结束。所以如果你成功刮取了“类LocalTime…”,根据您问题中的EDIT1,我可以告诉您这样做了,然后在regex的帮助下,您可以删除标记。虽然它确实从结果中删除了标记,但它没有从所有URL中删除标记(在本例中,我一次删除了3个)。我不明白,你能给我举个例子吗?对不起,我的错误,正则表达式没有删除字符,有些我认为是strong
实际上不是正常的文本。也许我把正则表达式放错了。我希望包括它,因为在我的问题中它没有出现,它在到达strong
时结束。因此,如果你设法做到了刮取“the classLocalTime…”,根据您问题中的EDIT1,我可以告诉您这样做了,然后在regex的帮助下,您可以去掉标记。虽然它确实从结果中删除了标记,但它并没有从所有URL中删除标记(在本例中,我一次刮取3个)。我不明白,你能给我举个例子吗?对不起,我的错误,正则表达式没有删除字符,有些我认为是strong
实际上不是正常的文本。也许我把正则表达式放错了。我用xpath找到了解决方案,正如你所说的,它看起来像'text':quote.xpath('/html/body/div[1]/div/div[3]/div/div/div/div/div/div/div[1]/div/div/div[1]/article[1]/div[4]/div/div/div/div/div[1]/p/text()).extract(),
。否则,它不会以良好的格式显示文本。而标题是'titleInArticle':quote.xpath('//header/h1/text()).extract(),
并正确显示。我已经找到了使用xpath的解决方案,正如您所说,它看起来像是'text:quote.xpath('/html/body/div[1]/div/div[3]/div/div/div/div/div[1]/article[1]/div[4]/div/div/div/div[1]/p/text())。extract(),
。否则它不会以良好的格式显示文本。虽然标题是“titleInArticle”:quote.xpath(“//header/h1/text()”).extract(),
,但显示正确。