Python 爬虫案例(一)

Python 爬虫案例(一)

对于初学爬虫的人来说,看些案例是非常有帮助的,该篇用PyCharm为工具,以scrapy为框架进行了一次简单的爬取,爬取的网站是http://www.wicomicocounty.org/bids.aspx,爬取的目标就是获取标书的名字,开标日期和截止日期等。

首先打开端口,创建名为CSDN的project, 在端口输入
scrapy startproject CSDN 回车
cd CSDN 回车
scrapy genspider wicomico wicomicocounty.org 回车

之后我们打开pycharm中CSDN所在的位置,将这个项目点开,会发现一个items.py文件,点开,我们先在items中将要封装的数据列出,同时这也是我们将要获取的数据:

import scrapy

class CsdnItem(scrapy.Item):
    title = scrapy.Field()   #标书名称
    expiredate = scrapy.Field()   #标书截止日期
    issuedate = scrapy.Field()   #标书开始日期
    web_url = scrapy.Field()   #网页链接
    bid_url = scrapy.Field()   #标书链接

接下来我们找到wicomico.py这个爬虫文件,开始编写爬虫的代码:

import scrapy
from scrapy.http import Request
from CSDN.items import CsdnItem

class wicomicoSpider(scrapy.Spider):
    name = 'wicomico'
    start_urls = ['http://www.wicomicocounty.org/bids.aspx']
    domain = 'http://www.wicomicocounty.org/'

    def parse(self, response):
        #用的谷歌浏览器,右键检查,利用xpath定位到bid所在的区域
        result_list = response.xpath("//*[@id='modulecontent']//table//div[5]//tr")
        #写一个for循环,对每条bid进行处理
        for result in result_list:
            #导入item
            item = CsdnItem()
            #定位出标书名称所在的位置
            title1 = result.xpath("./td[2]/span/a/text()").extract_first()
            #可以注意到定位的地方不是都有title存在,所以做一个判断
            if title1:
                #将title封装进item里边
                item['title'] = title1
                item["web_url"] = self.start_urls[0]
                #定位出标书的链接
                url1 = result.xpath("./td[2]/span/a/@href").extract_first()
                urls = self.domain + url1
                item['bid_url'] = urls
                #将成功获取的标书链接再进行分析,提取数据,进入parse_content函数中
                yield Request(urls, callback=self.parse_content, meta={'item': item})

    def parse_content(self, response):
        #将item传到该函数中使用
        item = response.meta['item']
        #定位标书的开始日期
        issuedate = response.xpath("//span[contains(text(),'Publication Date/Time:')]/../../following-sibling::tr[1]/td/span/text()").extract_first()
        item['issuedate'] = issuedate
        #定位标书的截止日期
        expireDate = response.xpath("//span[contains(text(),'Closing Date/Time:')]/../../following-sibling::tr[1]/td/span/text()").extract_first()
        item['expiredate'] = expireDate
        yield item

最后我们点开settings.py这个文件,找到ROBOTSTXT_OBEY这一行,改动一下代码,如下:
ROBOTSTXT_OBEY = False

以上代码就算完成了,已经是一个简单的爬虫,我们在pycharm下方点开terminal,输入:
scrapy crawl wicomico -o wicomico.csv
运行结束后在左侧边框栏会出现wicomico.csv的文件,点开即可看到我们爬取的结果!

你可能感兴趣的:(python爬虫)