Scrapy重定向直接链接

1 投票
1 回答
1517 浏览
提问于 2025-04-17 07:43

我正在使用CrawlSpider来抓取网页并提取数据。

我的起始网址只有一个链接(这是一个直接链接),我需要从这个链接中抓取数据(如果我使用BaseSpider并提供直接链接,数据可以成功抓取)。但是,当我运行CrawlSpider时,它出现了一些奇怪的301请求,控制权没有传递到parse_item(),这个函数负责抓取数据。

我有一个本地页面叫做main_page.html,里面有一个链接指向http://www.flipkart.com/office-supplies/pen/faber-castell/itmd4fpkgkd7e3fj?pid=pend4fpkyk2w9fd4&_l=U0SclLhlhi7jGPVIA8xWyA--&_r=tcVDd6I7AkBG9cR2hX21MA--&ref=5b471a78-5264-4e09-ba61-03f8965e10d0,我认为这是一个直接链接。当我运行爬虫时,我在scrapy中看到以下输出:

2011-12-05 15:54:34+0530 [flipkart_spider] DEBUG: 爬取成功 (200) http://localhost/main_page.html> (来源: 无)
2011-12-05 15:54:35+0530 [flipkart_spider] DEBUG: 重定向 (301) 到 http://www.flipkart.com/office-supplies/pen/faber-castell/itmd4fpkgkd7e3fj?pid=pend4fpkyk2w9fd4&_l=U0SclLhlhi7jGPVIA8xWyA--&_r=tcVDd6I7AkBG9cR2hX21MA--&ref=5b471a78-5264-4e09-ba61-03f8965e10d0> 从 http://www.flipkart.com/office-supplies/pen/faber-castell/itmd4fpkgkd7e3fj?_l=U0SclLhlhi7jGPVIA8xWyA--&_r=tcVDd6I7AkBG9cR2hX21MA--&pid=pend4fpkyk2w9fd4&ref=5b471a78-5264-4e09-ba61-03f8965e10d0>

我在parse_item()中有一个打印语句,但这个函数没有被调用。这里出什么问题了?

1 个回答

2

我觉得你应该把网址中问号后面的部分去掉,这样网址就变成了:http://www.flipkart.com/office-supplies/pen/faber-castell/itmd4fpkgkd7e3fj

更新:

在大多数情况下,网址中问号后面的参数只是用来记录一些不影响内容的信息,比如你是从哪个页面过来的,哪个菜单项是激活状态,或者会话ID。如果你把浏览器中的网址复制到爬虫工具里,网址中的某些参数可能和你的用户代理有关,这样在用不同的代理打开同一个网址时,可能会得到意想不到的结果。

如果你知道哪些参数可以安全地从网址中去掉,你也能避免很多重复的页面。通常你可以从不同的类别访问同样的商品,但每次商品的网址都会不同,因为参数ref=可能是用来记录你是从哪个页面过来的。

撰写回答