Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从网页上刮擦_Python_Scrapy - Fatal编程技术网

Python 从网页上刮擦

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

在用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(),
这就是我想要提取的内容,因此从
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'>(.+?)您可以使用类似的东西(XPath
string()
函数):


您可以使用类似的方法(XPath
string()
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(),
,但显示正确。