请问这种问题该怎么解决啊?
pycharm的scrapy包爬虫时重复获取同一条数据,
用yield传输之后
csv文件里除了第一行为列名以外,所有行的内容都是一样的,重复该网页目标区的某一条消息(多次运行生成的不同),比该网页目标区的此条信息总量还多
运行语句为:
scrapy crawl eshouse -o eshouse.csv
以下为我的主代码与补充代码
import scrapy
from scrapy import Selector,Request
from zhihuSpider.items import eshouseItem
#Item的class放在下一个代码块
class EshousespiderSpider(scrapy.Spider):
name = "eshouse"
allowed_domains = ["cd.esf.fang.com"]
start_urls = ["https://cd.esf.fang.com/"]
def parse(self, response):
sel=Selector(response)
list_items=sel.css('body > div.main1200.clearfix > div.main945.floatl > div.shop_list.shop_list_4 > dl')
for list_item in list_items:
item=eshouseItem()
a=sel.css('dl > dd:nth-child(2) > h4 > a > span::text').extract_first()
item['title']=a.replace('\n\t\t\t\t\t\t\t\t\t\t\t\t','')
item['price']=sel.css('dl > dd.price_right > span.red > b::text').extract_first()
item['priceper']=sel.css('dl > dd.price_right > span:nth-child(2)::text').extract_first()
item['jiegou']=sel.css('dl > dd:nth-child(2) > p.tel_shop >a::text').extract_first()
item['transfer'] = sel.css('dl > dd:nth-child(2) > p.clearfix.label > span::text').extract_first()
item['positive'] = sel.css('dl > dd:nth-child(2) > p.clearfix.label > span::text').extract_first()
item["url"] = list_item.css("dl > dd:nth-child(2) > h4 > a::attr(href)").extract_first()
print('\n\n\n\n\n\n\n\n\n\n',item['title'])
yield item
class eshouseItem(scrapy.Item):
title=scrapy.Field()
price=scrapy.Field()
priceper=scrapy.Field()
jiegou=scrapy.Field()
transfer=scrapy.Field()
positive=scrapy.Field()
url=scrapy.Field()
```
在使用Scrapy框架进行爬虫时,重复获取同一条数据通常是由于爬虫逻辑或配置问题引起的。以下是一些可能导致重复获取数据的常见原因和解决方法:
DUPEFILTER_CLASS = 'scrapy.dupefilters.RFPDupeFilter'
通过检查上述问题,并根据具体情况进行调试和修改,您应该能够解决重复获取同一条数据的问题。
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以提供一些可能的解决方法,尽可能详细地说明,但是由于没有实际代码,可能无法找出具体问题所在。这是一个可能的解决方案:
def parse(self, response):
item = MyItem()
# 填充item的字段信息
print(item) # 用于检查item是否包含正确的信息
yield item
class MyPipeline(object):
def process_item(self, item, spider):
print(item) # 用于检查接收到的item内容是否正确
# 其他处理逻辑
return item
from scrapy.selector import Selector
# 使用Selector解析HTML并提取数据的示例
html = """
<html>
<body>
<div class="my-class">
<h1>标题1</h1>
<p>内容1</p>
</div>
<div class="my-class">
<h1>标题2</h1>
<p>内容2</p>
</div>
</body>
</html>
"""
selector = Selector(text=html)
div_selector_list = selector.css('.my-class')
for div_selector in div_selector_list:
title = div_selector.css('h1::text').get()
content = div_selector.css('p::text').get()
print(f'Title: {title}, Content: {content}')
如果以上方法都没有解决问题,我无法提供更准确的解决方案。这可能涉及到更详细的代码和更具体的问题。