Skip to main content
 首页 » 编程设计

Python Scrapy 自定义爬取项xml格式

2025年05月04日13unruledboy

我使用 scrapy 抓取网页,我希望以某种格式输出到 xml 文件,下面是我的代码。

项目类

class Item(Item): 
# define the fields for your item here like: 
    id = Field() 
    name = Field() 
    address = Field() 
    birthdate = Field() 
    review = Field() 

蜘蛛类

class FriendSpider(BaseSpider): 
# identifies of the Spider 
name = "friend" 
count = 0  
allowed_domains = ["example.com.us"] 
start_urls = [ 
    "http://example.com.us/biz/friendlist/" 
] 
def start_requests(self): 
    for i in range(0,1722,40): 
        yield self.make_requests_from_url("http://example.com.us/biz/friendlist/?start=%d" % i) 
 
def parse(self, response): 
 
    response = response.replace(body=response.body.replace('<br />', '\n'))  
    hxs = HtmlXPathSelector(response) 
    sites = hxs.select('//ul/li') 
    items = [] 
 
    for site in sites: 
        item = Item() 
        self.count += 1 
        item['id'] = str(self.count) 
        item['name'] = site.select('.//div/div/h4/text()').extract() 
        item['address'] = site.select('h4/span/text()').extract() 
        item['review'] = ''.join(site.select('.//div[@class="review"]/p/text()').extract()) 
        item['birthdate'] = site.select('.//div/div/h5/text()').extract() 
 
        items.append(item) 
    return items 

输出格式如下:

<?xml version="1.0" encoding="utf-8"?> 
<items> 
  <item> 
     <id>1</id> 
     <name><value>Keith</value></name> 
     <review>txt............</review> 
     <address><value>United States</value></address> 
     <birthdate><value>1988-04-03</value></birthdate> 
  </item> 
  ..... 
<items> 

如何自定义 xml 格式如下:删除值标签并将 id 移动到项目根。

<?xml version="1.0" encoding="utf-8"?> 
<items> 
  <friend id = "1"> 
     <name>Keith</name> 
     <review>txt............</review> 
     <address>United States</address> 
     <birthdate>1988-04-03</birthdate> 
  </friend> 
  ..... 
<items> 

请您参考如下方法:

对于您的问题,您可以获得列表中的一个,在 page 中显示或者编写您自己的 XML 序列化程序,例如,基于 OrderedDict 类型。抓取结束后,您可以简单地使用所需参数调用 serialize() 并获取 XML 文档。