python 实现百度关键字自动爬虫

2023-11-18

# coding: utf-8

# In[3]:

import requests
from lxml import etree
import re
from sqlalchemy import create_engine


engine = create_engine('sqlite:///xskh_pachong.sqlite',echo=True)

from sqlalchemy import Table,Column,Integer,String,ForeignKey
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
DBSession = sessionmaker(bind=engine)
session = DBSession()
class xskh_pachong(Base):
    __tablename__="xskh_pachong"
    id = Column(Integer,primary_key=True)
    aname = Column(String(128))
    telephone = Column(String(126))
    info = Column(String(400))
    http = Column(String(128))
    
    @classmethod
    def save(cls,data):
        session.add(data)
        session.commit()
        return data.id
    

Base.metadata.create_all(engine)  


import requests
from lxml import etree
import re
from sqlalchemy import create_engine
def get_aname_and_telephone(url,company_name,telephone):
    if url == '':
        return
    try:
        response = requests.get(url)
    except:
        return
    try:
        content = response.content.decode('gbk','strict')
    except:
        content = response.content.decode('utf-8','strict')
    
    html = etree.HTML(content)

    #..//html/body//span//text()
    a = html.xpath('''..//html/body//span//text()''')
    pattern_mob = re.compile('1[3|4|5|7|8]\d{9}')
    telephone.append(pattern_mob.findall("".join(a)))

    #..//html/body//a//text()
    b =  html.xpath('''..//html/body//text()''')
    pattern_company = re.compile('[\u4e00-\u9fa5]{5,23}[司厂]{1}')
    company_name.append(pattern_company.findall("".join(b)))



import requests
from lxml import etree
import re
from sqlalchemy import create_engine
def get_by_word(wd):
    
    headersParameters = {    #发送HTTP请求时的HEAD信息,用于伪装为浏览器
            'Connection': 'Keep-Alive',
            'Accept': 'text/html, application/xhtml+xml, */*',
            'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
            'Accept-Encoding': 'gzip, deflate',
            'User-Agent': 'Mozilla/6.1 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
        }

    # pn = 换页 wd 是关键字
#     wd = '佛山 装饰 联系人'
    pn = 0;
    baidu_url = 'https://www.baidu.com'
    houzui = '/s?wd={}&pn={}'
    url = baidu_url+houzui.format(wd,pn)

    response = requests.get(url, timeout=60,headers = headersParameters)
    count = 1
    while True:  
        content = response.content.decode() 
        html = etree.HTML(content)
        #//div[@id="content_left"]/div[@id="1"]/h3//text()  
        #//div[@id="content_left"]/div[@id="1"]//div[@class="c-abstract"]//text()
        #//div[@id="content_left"]/div[@id="10"]//h3//text()
        #//div[@id="content_left"]/div/@id

        items = html.xpath('''//div[@id="content_left"]/div/@id''')
        for i in items:
            a = html.xpath('''//div[@id="content_left"]/div[@id="{}"]//h3//text()'''.format(i))
            b = html.xpath('''//div[@id="content_left"]/div[@id="{}"]//div[@class="c-abstract"]//text()'''.format(i))
            c = html.xpath('''//div[@id="content_left"]/div[@id="{}"]/h3/a/@href'''.format(i))

            aname = "".join(a)
            content =aname+' '+ "".join(b)
            http = "".join(c)


            pattern_mob = re.compile('1[3|4|5|7|8]\d{9}')
            telephone = pattern_mob.findall(content)
            pattern_company = re.compile('[\u4e00-\u9fa5]{5,23}[司厂]{1}')
            company_name = pattern_company.findall(content)

            if "".join(company_name)!="":
                aname = company_name[0]
            else:
                pass
                try:
                    get_aname_and_telephone(http,company_name,telephone)
                    company_name = company_name[0]
                    telephone = telephone[0]
                    aname = companay_name[0]
                except:
                    aname = ''


            if "".join(telephone)!="":
                pass
            else:
                pass
                print(http,company_name,telephone)
                try:
                   get_aname_and_telephone(http,company_name,telephone)
                   company_name = company_name[0]
                   telephone = telephone[0]
                except:
                    telephone =[]

            
            for i in telephone:
                dbobj = xskh_pachong()
                dbobj.aname =aname
                if i !='1':
                    dbobj.telephone = i
                    dbobj.info =content
                    dbobj.http =http
                    dbobj.save(dbobj)
                    count = count + 1 
                else:
                    dbobj.telephone = ''.join(telephone) 
                    dbobj.info =content
                    dbobj.http =http
                    dbobj.save(dbobj)
                    count = count + 1
                    break
                    pass
    



        ptext = html.xpath('''//*[@id="page"]/a[@class='n']//text()''')
        purl = html.xpath('''//*[@id="page"]/a[@class='n']//@href''')

        pgtext = "".join(ptext)    
        if pgtext.find('下一页')<0:
            break
        if pgtext.find('上一页下一页')>0:
            pgurl = purl[1]
        else:
            pgurl = purl[0]
        url = baidu_url+pgurl
        #下一页地址
        response = requests.get(url, timeout=60,headers = headersParameters)  
    
    print(count)   


with open('地点.txt', mode='r+', encoding='utf-8') as faddr:
     addr = faddr.readlines()  

with open('行业.txt', mode='r+', encoding='utf-8') as fhangye:
     hangye = fhangye.readlines()   

with open('关键字.txt', mode='r+', encoding='utf-8') as fkey:
     key = fkey.readlines()   
        
for item_addr in addr:
    for item_hangye in hangye:
        for item_key in key:
            wd = item_addr.replace('\n',' ')+item_hangye.replace('\n',' ')+item_key.replace('\n',' ')
            get_by_word(wd)    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 实现百度关键字自动爬虫 的相关文章

  • Python 中 genfromtxt() 的可变列数?

    我有一个 txt具有不同长度的行的文件 每一行都是代表一条轨迹的一系列点 由于每条轨迹都有自己的长度 因此各行的长度都不同 也就是说 列数从一行到另一行不同 据我所知 genfromtxt Python 中的模块要求列数相同 gt gt g
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • python ttk treeview:如何选择并设置焦点在一行上?

    我有一个 ttk Treeview 小部件 其中包含一些数据行 如何设置焦点并选择 突出显示 指定项目 tree focus set 什么也没做 tree selection set 0 抱怨 尽管小部件明显填充了超过零个项目 但未找到项目
  • 当x轴不连续时如何删除冗余日期时间 pandas DatetimeIndex

    我想绘制一个 pandas 系列 其索引是无数的 DatatimeIndex 我的代码如下 import matplotlib dates as mdates index pd DatetimeIndex 2000 01 01 00 00
  • 如何在 Windows 上使用 Python 3.6 来安装 Python 2.7

    我想问一下如何使用pip install对于 Python 2 7 当我之前安装并使用 Python 3 6 时 我现在必须使用 Windows 上的 Python 版本 pip install 继续安装 Python 3 6 我需要使用以
  • 行为:如何从另一个文件导入步骤?

    我刚刚开始使用behave http pythonhosted org behave 一个Pythonic BDD框架 使用小黄瓜语法 http docs behat org guides 1 gherkin html 行为需要一个特征 例
  • 在 Mac 上安装 Pygame 到 Enthought 构建中

    关于在 Mac 上安装 Pygame 有许多未解答的问题 但我将在这里提出我的具体问题并希望得到答案 我在 Mac 上安装 Pygame 时遇到了难以置信的困难 我使用 Enthought 版本 EPD 7 3 2 32 位 它是我的默认框
  • 使用 python 将文本发送到带有逗号分隔符的列

    如何使用分隔符 在 Excel 中将一列分成两列 并使用 python 命名标题 这是我的代码 import openpyxl w openpyxl load workbook DDdata xlsx active w active a a
  • 负整数的Python表示

    gt gt gt x 4 gt gt gt print b format x x 4 100 gt gt gt mask 0xFFFFFFFF gt gt gt print b format x mask x mask 4294967292
  • 如何逐像素绘制正方形(Python,PIL)

    在空白画布上 我想使用 Pillow 逐像素绘制一个正方形 我尝试使用 img putpixel 30 60 155 155 55 绘制一个像素 但它没有执行任何操作 from PIL import Image def newImg img
  • ValueError:无法插入 ID,已存在

    我有这个数据 ID TIME 1 2 1 4 1 2 2 3 我想按以下方式对数据进行分组ID并计算每组的平均时间和规模 ID MEAN TIME COUNT 1 2 67 3 2 3 00 1 如果我运行此代码 则会收到错误 ValueE
  • Python 矩阵每一行的总和

    lista 1 2 3 4 5 6 7 8 9 print lista def filas lista res for elemento in lista x sum lista elemento res append x print re
  • 使用 Doc2vec 后如何解释 Clusters 结果?

    我正在使用 doc2vec 将关注者的前 100 条推文转换为矢量表示形式 例如 v1 v100 之后 我使用向量表示来进行 K 均值聚类 model Doc2Vec documents t size 100 alpha 035 windo
  • asyncio - 多次等待协程(周期性任务)

    我正在尝试为异步事件循环创建定期任务 如下所示 但是我收到 RuntimeError 无法重用已等待的协程 异常 显然 asyncio 不允许等待相同的可等待函数 如中讨论的这个错误线程 https bugs python org issu
  • Pandas 在特定列将数据帧拆分为两个数据帧

    I have pandas我组成的 DataFrameconcat 一行由 96 个值组成 我想将 DataFrame 从值 72 中分离出来 这样 一行的前 72 个值存储在 Dataframe1 中 接下来的 24 个值存储在 Data
  • Google App Engine 中的自定义身份验证

    有谁知道或知道我可以在哪里学习如何使用 Python 和 Google App Engine 创建自定义身份验证流程 我不想使用 Google 帐户进行身份验证 并且希望能够创建自己的用户 如果不是专门针对 Google App Engin
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • C++11 chrono计时

    我的C 文章列表 C 中Duration Time point和Clocks 万里归来少年心的博客 CSDN博客 time point C 11中的chrono库 实现时间相关的功能 1 time point time point表示一个时
  • 什么是php 服务器地址,服务器地址是什么

    服务器地址是服务器的ip地址 IP地址就是给每个连接在互联网上的主机分配的一个32位地址 有这种地址 才保证了用户在连网的计算机上操作时 能够高效而且方便地从千千万万台计算机中选出所需的对象来 本文操作环境 Windows7系统 Dell
  • AI 对抗超级细菌:麦克马斯特大学利用深度学习发现新型抗生素 abaucin

    内容一览 鲍曼不动杆菌是一种常见的医院获得性革兰氏阴性病原体 通常表现出多重耐药性 利用传统方法 发现抑制此菌的新型抗生素很困难 但利用机器学习可以快速探索化学空间 从而增加发现新型抗菌分子的可能性 近期 国际期刊 Nature Chemi
  • Java生成纳秒时间戳

    记一次生成高精度时间戳 类似与 net的时间戳 码着备忘 long timestamp System currentTimeMillis 1000000L System nanoTime 1000000L System currentTim
  • 函数的防抖与节流

    一 防抖与节流的联系 相同点 防抖 Debounce 和节流 Throttle 都是用来控制某个函数在一定时间内触发次数 两者都是为了减少触发频率 以便提高性能以及避免资源浪费 不同点 节流是第一个说了算 后续都会被节流阀屏蔽掉 防抖是最后
  • (小陈c语言)井字棋-初步实现以及改进方向

    作为小学上课偷偷和同桌在草稿本上玩的小游戏 井字棋 如今在电脑上也可以自己写出来玩 如图 不要惊讶 下面我们来看看怎么实现这个代码 正文开始 1 菜单界面 用多个printf 来打印即可 注意中间最好是空的不要连着字 void menu p
  • CVPR2020-RFANet-图像超分辨率新网络

    创新点都比较小 提升也很小 有种炒冷饭的感觉 论文地址 http openaccess thecvf com content CVPR 2020 papers Liu Residual Feature Aggregation Network
  • pycharm GIT 账号密码输入错误如何更改

    pycharm GIT 账号密码输入错误如何更改 第一次在pycharm中 输入git的账户或者密码出现错误 下一次pycharm系统会记住你输入错误的账户和密码 The requested URL returned error 500 只
  • python的日志logging模块使用总结

    文章转载与 http outofmemory cn code snippet 450 python rizhi logging module usage summary 1 简单的将日志打印到屏幕 import logging loggin
  • Android5——活动的生命周期方法

    1 活动的生命周期方法 onCreate 会在活动第一次被创建的时候使用 onStart 会在活动由不可见变为可见的时候调用 OnResume 会在活动准备好和用户进行交互的时候调用 此时的活动一定位于返回栈的栈顶 并且处于运行状态 onP
  • 简单两步解决Python的NLTK库DATA安装问题

    前言 本人使用Anaconda集成开发环境 已经安装有NLTK库 在使用NLTK最简单的分词功能时报错 查询错误 得知是没有安装NLTK的数据包 系统推荐使用以下命令 import nltk nltk download 用了之后弹出窗口 出
  • ROS 第四天 ROS中的关键组件

    1 Launch文件 通过XML文件实现多节点的配置和启动 可自动启动ROS Master
  • word文档中如何添加目录

    如果word文档的内容较多 结构复杂 那么在文档首页设置一个目录链接是非常有必要的 本文将介绍如何添加此目录 1 设置标题 在文档中选择将在目录中显示的内容 将之设置为 标题1 标题2 或 标题3 等 其中 标题1 代表一级标题 应为顶级目
  • 如何在 Java 中调用 MATLAB 代码

    文章目录 测评 完整源代码 运行环境 MATLAB R2022a Java 8 1 8 0 311 IntelliJ IDEA 2022 2 1 Ultimate Edition Maven 3 8 3 Windows 10 教育版 64位
  • ios 删除无用证书

    1 前往文件夹 Library MobileDevice Provisioning Profiles 然后可以删除里面的所有文件 然后就可以根据自己的需求重新下载了
  • STM32之_keil 编译内存大小解析

    Program Size Code 28784 RO data 6480 RW data 60 ZI data 3900 的含义 1 Code 程序所占用的FLASH大小 存储在FLASH 2 RO data Read only data
  • 简单的c++ UDP类 + 多线程 win32编程

    UdpClient h include Thread h class IUdpRecvCallback public virtual void OnRecv const char buf USHORT len const char from
  • 基恩士PLC KV8000+XH16EC总线控制,全ST程序实例

    基恩士PLC KV8000 XH16EC总线控制 全ST程序实例 本人自己开发全程序无加密 公司级框架 功能齐全 提供项目源码框架FB源码 触摸屏源码 需要一定ST基础才能看懂 重在分享编程思想 没用过该控制器的请慎拍 请使用11 10版本
  • 图像的二值化分割,otsu类间方差法

    二值化图像指图像中的每个像素只取两个离散的值之一 用数学公式表示为 公式中 f x y 表示一幅数字图像 X Y表示该图像中某像素的坐标值 T为 二值化的阈值 表示经过阈值运算后的二值化图像 这里0和1仅仅是一个抽象表示 并非实际像素值 它
  • python 实现百度关键字自动爬虫

    coding utf 8 In 3 import requests from lxml import etree import re from sqlalchemy import create engine engine create en