玩耍Pythonpython@IT·互联网

9.Python3爬虫实例——使用Scrapy重构代码爬取名著

2016-08-06  本文已影响3069人  KaelQ

1.准备

2.使用Scrapy重构代码

2.1创建新项目

2.2 定义要爬取的对象的属性

class BookName(Item):
    name=Field()
    url=Field()
class BookContent(Item):
    id=Field()
    title=Field()
    text=Field()

2.3 定义爬虫

class BookSpider(CrawlSpider):
    name="book"#爬虫名字
    allowed_domains=["shicimingju.com"]#允许的域名
    start_urls=[#开始爬取的网站
        "http://www.shicimingju.com/book/sanguoyanyi.html"
    ]
 rules=(
        Rule(LinkExtractor(allow=('http://www.shicimingju.com/book/sanguoyanyi.html',)),callback='bookMenu_item'),
        Rule(LinkExtractor(allow="http://www.shicimingju.com/book/.*?\d*?\.html"),callback="bookContent_item")
    )
    def bookMenu_item(self,response):
        sel=Selector(response)
        bookName_items=[]
        bookName_item=BookName()
        bookName_item['name']=sel.xpath('//*[@id="bookinfo"]/h1/text()').extract()
        print(bookName_item)
        bookName_items.append(bookName_item)
        return bookName_items
 def bookContent_item(self,response):
        global num
        print(num)
        num+=1
        sel = Selector(response)
        bookContent_items = []
        bookContent_item = BookContent()
        bookContent_item['id']=re.findall('.*?(\d+).*?',response.url)
        bookContent_item['title']=sel.xpath('//*[@id="con"]/h2/text()').extract()
        bookContent_item['text']="".join(sel.xpath('//*[@id="con2"]/p/descendant::text()').extract())
        bookContent_item['text']=re.sub('\xa0',' ',bookContent_item.get('text'))
        print(bookContent_item)
        bookContent_items.append(bookContent_item)
        return bookContent_items

2.4 执行爬虫

3.总结

  1. python3 使用scrapy的crawlspider问题 解决方法:查看最新的官方文档。
  2. xpath: 所有"< p >"标签下的内容:xpath('//p/descendant::text()')
    只需要< p >或者< strong >下内容:xpath('//p/text()|//p/strong/text()')
    xpath也是个大坑,改天把它填了。
上一篇下一篇

猜你喜欢

热点阅读