微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何一次正确地刮擦带有附加属性的1个URL?

如何解决如何一次正确地刮擦带有附加属性的1个URL?

我希望在其职业页面中为各个href抓取多个网站域。

我只想要工作的链接,而没有其他任何东西,而我发现最简单的方法是解析拼凑的响应并从特定的CSS路径提取href。

到目前为止,我的解决方案是创建2个字典,每个字典都具有一个通用键,即URL和Attribute。 然后,这些键具有预先定义的CSS路径和职业页面URL。

将来我将根据数据文件自动创建多个词典。

我将所有这些词典存储在python列表中,我的计划是从列表中一次调用每个词典,并使用关联的URL和属性作为scrapy的必需输入。

# Each List contains two dictionaries,# One containing the website's careers URL,# the other containing the location on their jobs container on that page.
# The below is an example but I will name the lists 1,2,3 etc so in a database I can call them easier.
List1= ["https://exampleurl.com/careers",".joblist a::attr(href)"]
List2 = ["https://exampleurl.com/en/Company/Career-Opportunities",".content a::attr(href)"]
Dicti = {"URL" : List1[0],"Att" : List1[1]}

这基本上就是我设置字典列表的方式。

我正在使用

start_urls = [
        List1[Dicti["URL"]],List2[Dicti["URL"]]
    ]

然后我也要像这样解析数据

jobs = response.css(Dicti["Att"]).extract()

我认为这可能是我出问题的地方。尽管它确实加载了每个URL并从每个URL抓取了HTML,但是它并没有正确地从属性中解析。

我尝试一次抓取一个列表,尽管起始URL中只有1个列表。效果非常好,就是当我尝试在起始网址中输入多个列表时。

我到底在做什么错,也许我在阅读信息后误解了蜘蛛的工作方式。我本质上是想运行list1,然后停止蜘蛛程序并为list2运行新实例,同时说提取的数据。

任何有关如何克服这一问题的建议将不胜感激。

解决方法

任何一种都可以将您的数据组织成一个简短列表

urls = [
    ["https://exampleurl.com/careers",".joblist a::attr(href)"],["https://exampleurl.com/en/Company/Career-Opportunities",".content a::attr(href)"],...
]

然后遍历urls并访问类似

的组件
for entry in urls:
    url = entry[0]
    attribute = entry[1]

或更短

for url,attribute in urls:
    ...

或列出小词典

urls = [
    {'URL': "https://exampleurl.com/careers",'ATT': ".joblist a::attr(href)"},{'URL': "https://exampleurl.com/en/Company/Career-Opportunities",'ATT': ".content a::attr(href)"},...
] 

然后遍历urls并访问类似

的组件
for dict_ in urls:
    url = dict_['URL']
    attribute = dict_['ATT']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。