python一键获取豆瓣租房小组前十页信息,并导入EXCEL(Xpath法)

python一键获取豆瓣租房小组前十页信息,并导入EXCEL(Xpath法),第1张

python一键获取豆瓣租房小组前十页信息,并导入EXCEL(Xpath法)
#encoding=utf-8
模块导入
import requests
from lxml import etree
import xlwt
import urllib.request

主程序

def main():
    baseurl = 'https://www.douban.com/group/beijingzufang/discussion?start={0}' #URL地址,{}中间数字可以跟随for循环一直更改
    datalists=getdata(baseurl)
    savedata(datalists)

网页解析

def getdata(baseurl): #爬取网页
    datalist = [] #新建空列表,方便存储爬取到的数据
    for i in range(0,226,25): #豆瓣每一次翻页,数字增加25,故步长设置为25,左闭右开,226结束
        url = baseurl.format(i)#生成每一页的url
        headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3870.400 QQBrowser/10.8.4405.400',
        }#设置请求头
        resp=requests.get(url=url,proxies={'https':'IP'},headers=headers,)#访问网页,多次访问豆瓣会屏蔽,因此需要换IP
        html=resp.content.decode('utf-8') #设置网页解码格式
        tree=etree.HTML(html)#根据xpath的规则解析网页

        names=tree.xpath('//td[@]/a/text()')  #//表示全局搜索,页面的属性刚好是我们需要的,用text()获取到下面具体的文本信息。
        hrefs = tree.xpath('//td[@]/a/@href')#用@属性名获取属性值
        users= tree.xpath('//td[@nowrap="nowrap"]/a/text()')
        # 如果print(names)#生成的是一个大列表,含25个names

        for x in zip(names,users,hrefs):	#将每一次获取到的标题名和链接,用户名合并成为元组
            x=list(x) #将元组转化成列表

		filters=['136964886X7','热心吃瓜群众','1398319X6978','M.','18315277X59','于','1762X9668','紫幕','15223X4445','墨尘若雪',
                 '18502X5129','。','1911165X949','1512X0681','16602X860','嘛嘛公寓','18716X0847','招财喵','1327X85500','你是来拉屎的吧','1X22301207',
                '真的 ','157614X040','丁丁猫儿' ,'盯盯猫儿','清','李三岁','150x337327','不要芝麻','X女生租房','133X39801']#设置中介过滤容器,对列表进行检查,如果有信息在容器里面,则不加入列表
        if any(keyword in x for keyword in filters):continue #遍历容器,如果容器的信息不在X列表里面,则继续向下执行
        datalist.append(x) #把X添加到datalist列表
        print('爬取第%d页完毕'%i)
    return datalist  #返回内容到主程序,进行下一个程序的执行

数据保存到EXCEL

def savedata(datalists):#保存数据
    workbook=xlwt.Workbook(encoding='utf-8') #新建表格
    worksheet=workbook.add_sheet('目录') #新建sheet
    col=('标题','用户','链接')     #第一行标题栏名称
    for i in range(len(col)):   #len()是根据标题的长度来判断需要的列数
        worksheet.write(0,i,col[i])#该处第三个参数运用到的是访问元组的方式,横向填写好标题栏名称
    for i in range(0,len(datalists)): 
        # print('第%d条'%i)
        data = datalists[i]#遍历外部传入的列表,依次将每一个数据赋值给data,

        for j in range(0,len(col)):#控制列数

            worksheet.write(i+1,j,data[j].strip())#第一行是标题栏,因此从第二行开始,第二个是列数保持参数不变,第三个参数根据列数,获取到data当中的的0,1,2的值,并将信息填入表格。.strip是去掉空白,规范格式
    workbook.save('12月8日2.xlsx') #保存表格
    print('输出完毕')

程序启动

if __name__ == '__main__': 
    main()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5701485.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存