吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5169|回复: 1
上一主题 下一主题
收起左侧

[Python 转载] python爬虫,狂爬各种导航网站并分类

[复制链接]
跳转到指定楼层
楼主
xiaotuzi1 发表于 2020-7-28 18:43 回帖奖励
本帖最后由 xiaotuzi1 于 2020-7-28 22:40 编辑


由于最近需要获取分类好的网站,所有想到了通过爬虫来爬各类导航网站,先说下技术路线。
使用python爬虫常用框架:scrapy


如图,该框架基本上由这四个核心模块构成,items.py 定义数据类型,pipeline是将爬虫返回的数据处理并入库,spiders目录下面是各个子爬虫(待会举例说明),begin.py用来启动爬虫。

这里主要说明spiders这个里面子爬虫,其他的都有教程,请各位大神自己学习下。

以爬好用好网这个网站为例:haoyonghaowan.com

[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#coding=utf-8
'''
Created on 2018-3-27
 
@author: haoning
'''
 
import scrapy
import sys
from util import get_absolute_path
import hashlib
from util import now_time
from util import convert_mg_url_to_base64
import urlparse
from util import lock
from util import unlock
from lxml import etree
m = hashlib.md5()
 
sys.path.append(get_absolute_path())
from crawl.scrapy_crawl.items import ScrapyCrawlItem
 
class BookmarkSpider(scrapy.Spider):
    name = "haoyonghaowan"
    allowed_domains = ["haoyonghaowan.com"]
     
    def __init__(self):
        self.base = "http://www.haoyonghaowan.com"
        self.reqeust_url=self.base
        self.urls=[]
 
    def start_requests(self):
        self.urls.append(self.reqeust_url)
        for url in self.urls:
            yield scrapy.Request(url=url, callback=self.parse_link_page)
             
    def parse_link_page(self,response):
        parts=response.xpath('//div[contains(@class,"sitelist")]/ul/li/a/@href').extract()
        for url in parts:
            yield scrapy.Request(url=url, callback=self.parse_item)
           
             
    def parse_item(self,response):
         
        items=response.xpath('//article[contains(@class,"sitelist")]/div/ul/li/a').extract()
        for it in items:
            try:
                lock()
                item = ScrapyCrawlItem()
                item['category2']=self.parse_category2(response)
                item['category1']=self.parse_category1(response)
 
                it=etree.fromstring(it)
                item['name']=self.parse_name(it)
                item['url']=self.parse_url(it)
                if item['url']:
                    item['icon']=self.parse_icon(item['url'])
                    item['crawl_time']=self.parse_crawl_time(it)
                    item['content']=self.parse_content(it)
                    item['origin_website']=self.base
                    item['stop']=False
                     
                    print item
                     
                    if item['name'] and item['url'and item['category2'] and ("http" in item['url']):
                        yield item
                         
            except Exception as e:
                print "ee",e
            finally:
                unlock()
         
        item = ScrapyCrawlItem()
        item['stop']=True
        yield item
 
    def parse_name(self, it):
        name=it.xpath('//text()')
        if name:
            return name[0]
        return None
     
    def parse_url(self, it):
        href=it.xpath('//@href')
        if href:
            return href[0]
        return None
     
    def parse_category2(self, response):
        name=response.xpath('//article[contains(@class,"sitelist")]/header/h2/text()').extract()
        if name:
            return  name[0].replace('\n','').replace('\t','').replace(' ','').replace('\r','')
        return None
     
    def parse_category1(self, response):
        return None
 
    def parse_icon(self,link):
        try:
            url="http://www.google.cn/s2/favicons?domain="+urlparse.urlparse(link).netloc
            return convert_mg_url_to_base64(url)
        except Exception as e:
            print "errro it",e
     
    def parse_crawl_time(self, response):
        return now_time()
     
    def parse_content(self, it):
        return None
 
if __name__ == '__main__':
    spider = BookmarkSpider()
    print spider.now_time()


可以看得很清楚,程序重点集中在 def parse_item(self,response) 这个函数中,主要通过xpath来解析网页,然后将解析好的内容以item的形式返回给上文提到的pineline去处理,然后准备入库。



数据库如上图,整个代码非常简单,就不再各位大神面前献丑了。

其实最近发现一个不错的网站,书签地球:https://www.bookmarkearth.com/,这个网站的内容整理的非常整齐,但是每次爬取都返回503错误,暂时还没有找到好的办法解决。

还在继续研究如何攻克这个问题,好了,先写到这里,希望各位大神喜欢我的帖子。

免费评分

参与人数 1吾爱币 +1 收起 理由
拖mast + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
寒雨孤夜 发表于 2020-7-29 09:00
学习一下,正在学爬虫。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-8-26 07:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表