在Scrapy中设置自定义的长起始URL列表

时间:2017-06-13 21:10:15

标签: scrapy

抓取从start_urls = []

中包含的列表开始

我需要一长串这些起始网址和解决此问题的两种方法:

方法1:使用pandas定义starting_urls数组

#Array of Keywords 
keywords = pandas.Keyword
urls = {}
count = 0
while(count < 100):
     urls[count]='google.com?q=' + keywords[count]
     count = count + 1
#Now I have the starting urls in urls array.

但是,它似乎没有定义starting_urls = urls因为我跑的时候:

scrapy crawl SPIDER

我收到错误:

  

错误:请求url必须是str或unicode,得到int:

方法2:

每个起始网址包含分页内容,在def parse方法中,我有以下代码来抓取所有链接网页。

next_page = response.xpath('//li[@class="next"]/a/@href').extract_first()
yield response.follow(next_page, callback=self.parse)

我想添加其他页面以从上面定义的urls数组进行抓取。

count=0
while(count < 100):
     yield response.follow(urls[count], callback=self.parse)
     count=count + 1

但似乎这两种方法都不起作用。也许我无法将此代码添加到 spider.py 文件中?

2 个答案:

答案 0 :(得分:2)

要做第一个注释,但显然我不能说我已经运行了整个脚本,因为它不完整但我注意到的第一件事就是你的面部网址确实需要或者是正确的格式......“http://ect.ect”用于scrapy tp提出正确的请求

此外,不要质疑你的技能,但如果你不知道通过使用strip,split和join函数,你可以从列表,字符串,字典转向相互添加整数来实现所需的预期效果。 ..

发生什么事:

虽然使用范围而不是计数......但模仿你的问题

lis = range(11)
site = "site.com/page="
for i in lis:
    print(site + i)
----------
TypeError: Can't convert 'int' object to str implicity

#TURNING MY INT INTO STR:
lis = range(11)
site = "site.com/page="
for i in lis:
    print(site + str(i))
--------------------
site.com/page=0
site.com/page=1
site.com/page=2
site.com/page=3
site.com/page=4
site.com/page=5
site.com/page=6
site.com/page=7
site.com/page=8
site.com/page=9
site.com/page=10

关于错误,当你有计数到“+ 1”,然后配置整个URL然后添加1 ...然后你试图用一个整数做一个字符串变量...我想象一下,只需将整数转换成一个字符串然后再构建你的网址,然后返回到整数,然后再添加一个到计数中,这样它就可以适当地更改为...

我保持外套尽可能干净的方法更加清洁。通过在您开始抓取的根目录或当前工作文件夹中添加一个额外的文件,以及您希望抓取的所有URL,您可以使用pythons读取和写入函数并打开文件或者决定您的蜘蛛脚本。像这样

class xSpider(BaseSpider):
    name = "w.e"
    f = open("urls.txt")
    start_urls = [url.strip() for url in f.readlines()]
    f.close()

真正困扰我的是你的错误,就是说你正在用一个整数编写饮料,如果你需要进一步完整的蜘蛛片以及编码器血缘关系的精神,我会再次问你,也就是你的settings.py因为我现在告诉你,尽管对settings.Py文件进行了任何调整,但最终还是找不到.Py文件你将无法抓取Google搜索页面...而不是整个结果页面的数量...然后我会推荐Scrappy与漂亮的西装搭配

答案 1 :(得分:1)

我看到的直接问题是,当你需要一个列表时,你正在制作一个DICT。 :)。将其更改为列表。

还有各种各样的交互取决于你从哪个底层蜘蛛继承(如果你做的话)。尝试切换到列表,如果仍有问题,请使用更多数据再次查询问题