Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 如何为列表中的每个URL创建列表/结果?_Python_Web Scraping_Scrapy - Fatal编程技术网

Python 如何为列表中的每个URL创建列表/结果?

Python 如何为列表中的每个URL创建列表/结果?,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,所以,我正试图从一个网站上抓取数千个网页。也就是说,一个域名和路径,有数千个参数。对于我下面给出的示例,https://A.com“是我的域名。我在列表中有数千个参数作为字符串,['a','b','c'],例如。所有这些页面都有相同的结构,我希望所有页面都有相同的部分。(link\u list.append({'data':j}),这是我想要的结果,它的形式是如果我从页面提取的每个信息的列表都是我列表中的字典) 我想要的是,我希望我的程序返回每个URL的列表,或者在本例中,返回mylists中的

所以,我正试图从一个网站上抓取数千个网页。也就是说,一个域名和路径,有数千个参数。对于我下面给出的示例,
https://A.com“
是我的域名。我在列表中有数千个参数作为字符串,
['a','b','c']
,例如。所有这些页面都有相同的结构,我希望所有页面都有相同的部分。(
link\u list.append({'data':j})
,这是我想要的结果,它的形式是如果我从页面提取的每个信息的列表都是我列表中的字典)

我想要的是,我希望我的程序返回每个URL的列表,或者在本例中,返回
mylists
中的参数。以下是我的代码:

class ASpider(scrapy.Spider):
    name = "ABC"
    myDom = 'https://A.com/'
    mylists = ['a', 'b', 'c']
    start_urls = []
    
    for mylist in mylists:                   #what I can think of is by using
        start_urls = [myDom + mylist]        #for loop and my start_urls will
                                             #have only one url to run at a
        def parse(self, response):           #time and my link_list list will
            link_list = []                   #return me the result of only
            for xyz in response.css("..."):  #the only single url for this  
                j = xyz.css("...").get()     #iteration and next iteration it
                link_list.append({'data': j})#returns me the next url for the
            print(link_list)                 #parameter in the list
我上面的代码中没有提到的是,我想将结果,
link\u list
从每个页面分配到一个主词典或列表。(如果是字典,则键将是页面的参数,值将是结果列表。如果是列表,则第一列是页面的参数,第二列是结果列表。)我没有将其包含在代码中的原因是因为我仍在这一部分上苦苦挣扎,我不希望它变得更加混乱

上面的代码导致爬虫只给了我列表中最后一个URL的结果。 我如何解决这个问题?多谢各位


PS:因为有超过7k的页面我想刮,我也希望它以最小的时间运行。因此,要么遍历所有参数,要么同时遍历所有参数。但是,目前这不是一个问题。

您可以使用开始URL作为属性。我想这就是你想要的

class ASpider(scrapy.Spider):
    name = "ABC"
    def __init__(self):
        self.myDom = 'https://A.com/'
        self.mylists = ['a', 'b', 'c']
        self.link_list = dict()


    @property
    def start_urls(self):
        urls = []
        for mylist in self.mylists:
            urls.append(self.myDom + mylist)
        return urls 

    def parse(self, response):
        for xyz in response.css("..."):
            j = xyz.css("...").get()
            self.link_list[j] = j

不要使用类,甚至不要使用方法。先把所有的东西一行一行地写下来。注意每一行正在做什么。如果可能的话,在每一行后面使用打印语句来仔细检查它是否在做你想做的事情。@vishnuprasanth说实话,我很乐意这样做。不过,我对Python非常陌生,问题是我只是在遵循Scrapy官方网站上的教程。首先,非常感谢。然而,我刚刚发现它应该是
start\uurl=[myDom+mylist]
而不是
start\uurl.append(myDom+mylist)
。在本例中,我打算为每个URL获取一个
链接列表。这可能吗?我看你很难理解你想要什么。请用最新的图片编辑您的问题,以及打印时您的期望。非常感谢!我刚刚编辑了我的帖子。我不知道是否更清楚,但是如果您需要更多的澄清,请让我知道。您是否尝试在init中使用self制作一个字典,并附加您想要的所有参数。对不起,但是我如何才能做到?