多线程爬取猪八戒网站

该项目使用Python的多线程技术爬取猪八戒网IT类别下的所有公司信息,包括从获取各小类URL到解析人才档案页面,处理反爬策略,以及解决分页和重复公司数据的问题。通过分析网页结构,利用lxml和xpath提取数据,并通过判断条件确定数据来源。最后,采用字典存储页数信息,列表记录已爬取公司,以及多线程提升爬取速度。
摘要由CSDN通过智能技术生成

此项目是使用多线程爬取猪八戒网址it类的所有公司信息 

 

猪八戒主页网址:https://guangzhou.zbj.com/

 

我们要爬的是it这个大类的这10小类

 

通过检查我们发现,所有的网址都是放在带有class=‘channel-service-grid clearfix’这个属性的div标签下面,我们可以通过使用lxml库以及xpath语法来获得所有小类的url

这个函数代码如下:

def get_categories_url(url): 
    details_list = []
    text = getHTMLText(url)
    html = etree.HTML(text)
    divs = html.xpath("//div[@class='channel-service-grid-inner']//div[@class='channel-service-grid-item' or @class='channel-service-grid-item second']")
    for div in divs:
        detail_url = div.xpath("./a/@href")[0]
        details_list.append(detail_url)
    return details_list

 

 

随便进入一个类,我们右键检查一个公司,发现这个公司的url就放在一个带有class=‘name’的a标签下的href属性,然后再加上'https://'就好

函数如下:

    def get_company_urls(url):
        companies_list = []
        text = getHTMLText(url)
        html = etree.HTML(text)
        h4s = html.xpath("//h4[@class='witkey-name fl text-overflow']/a/@href")
        for h4 in h4s:
            company_url = 'https:' + h4
            companies_list.append(company_url)
        return companies_list

 

 

 

对于每一页,我们只需要循环遍历就能够得到一页中所有公司的信息

这时候我们随便点进去几个公司来看,发现所有公司基本可以分为两类:

一种是有首页、买服务、看案例、交易评价、人才档案之类的

另一种是像这样就直接到人才档案这一页面的

 

可以看出我们要爬取的数据基本都在人才档案这个页面,因此我们要设定一个判断条件,如果它有首页、买服务、看案例、交易评价、人才档案这些的话就跳到人才档案的页面那里

我们可以看到它这些是放在li标签下面的,我们可以这样来设定判定条件:在网页中找到带有class='witkeyhome-nav clearfix'的ul标签,获取它下面的li标签。如果获取不到li标签或者带有li标签的列表的长度为0的话就代表已经是在人才档案这个页面下面,对这一类的url就不用采取特别处理。如下图所示,对于不是直接到人才档案的网页,我们只需要找到最后一个li标签下面的href属性 再加上'https://'就ok了

代码如下:

lis = html.xpath("//ul[@class='witkeyhome-nav clearfix']//li[@class=' ']")
                if len(lis) == 0:
                    company_url_queue.put(company)
                    continue
                for li in lis:
                    try:
                        if li.xpath(".//text()")[1] == '人才档案':
                            rcda_url = ('https://profile.zbj.com'+ li.xpath("./a/@href")[0]).split('/salerinfo.html')[0]+'?isInOldShop=1'
                            company_url_queue.put(rcda_url)
                            break
                        else:continue
                    except:pass #有一些网站的li标签是空的,因此会报错,pass掉就好

 

拿到每一个公司的人才档案页面url之后,正常来说我们就能够按照这个思路拿到我们所有想拿的信息。可是我第一次对爬取下来的人才档案页面url用xpath库查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值