Python3 Scrapy框架中进入callback函数,但第一级取的值存入数据库中都重复

发布于 2022-09-06 11:56:49 字数 1772 浏览 11 评论 0

-- coding: utf-8 --

import scrapy,re
from scrapy.selector import Selector
from scrapy.http import Request
from novelspider.items import NovelspiderItem
import re

class novelSpider(scrapy.Spider):

name = 'novelSpider'
allowed_domains = ["www.tibetif.com"]
url = "http://www.tibetif.com/index.php?m=content&c=index&a=lists&catid=955"
start_urls = [url]

def parse(self, response):
    item = NovelspiderItem()
    list = response.xpath(".//table[@class='proinfo']/tbody/tr")
    for i in range(2,len(list)):
        item['projectNo'] = list[i].xpath(".//td/text()").extract()[0].strip()
        item['url'] = list[i].xpath(".//td[2]/a/@href").extract()[0]
        item['title'] = list[i].xpath(".//td[2]/a/text()").extract()[0]
        item['money'] = list[i].xpath(".//td[4]/text()").extract()[0]
        item['date'] = list[i].xpath(".//td[5]/text()").extract()[0]
        yield scrapy.Request(item['url'],meta={'item':item},callback=self.detail)

def detail(self,response):
    item = response.meta['item']
    selector = Selector(response)
    text = selector.xpath(".//div[@class='wrapper']/table[3]").xpath('string(.)').extract()[0].replace("\n"," ").replace("\t"," ").replace("\r"," ").strip('\n').strip('\t').strip('\r').lstrip().rstrip()
    print(item['title'])
    companyObj = re.search(r'标的企业名称\s*(\S+)',text)
    if companyObj:
        item['company'] = str(companyObj.group(1))
    priceObj = re.search(r'注册资本\(元\)\s*(\S+)',text)
    if priceObj:
        item['price'] = str(priceObj.group(1))
    return item
    
    

问题:Python3 Scrapy框架中不进入yield scrapy.Request(item['url'],meta={'item':item},callback=self.detail)中的callback=self.detail函数,导致数据库中在parse函数中取得的值都是最后一个页面的值

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

川水往事 2022-09-13 11:56:49

scrapy框架出python3版本了吗

趁微风不噪 2022-09-13 11:56:49

Python3已经支持scrapy啊

夜唯美灬不弃 2022-09-13 11:56:49

亲测可以进入detail

clipboard.png

感觉你最好yeild item试试?

め七分饶幸 2022-09-13 11:56:49

你把detail的最后一行 return item 改成 yield item试试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文