前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >初步入门爬虫

初步入门爬虫

作者头像
y191024
发布2022-09-20 19:04:58
发布2022-09-20 19:04:58
20400
代码可运行
举报
运行总次数:0
代码可运行

嘎嘎谢谢你们的点赞!

首先要import requests库,在终端terminal中输入pip install requests即可安装。

整理一下爬取的思路:

1.指定url

2.UA(User-Agent)伪装 (headers)

3.发起请求 (get/post)

4.获取响应的请求 (text/json())

5.进行数据解析 (正则,bs4, xpath*)

6.持久化存储数据 (json.dump(),保存为json文件)

现在做个简单的搜狗页面爬取:

代码语言:javascript
代码运行次数:0
复制
import requests
# UA 即User-Agent(请求载体(浏览器)的身份标识)
# 我们当前的载体是爬虫程序
# UA伪装:门户网站的服务器会检测对应请求的载体身份标识,如果检测到身份载体身份标识为浏览器,
# 意味着请求为正常请求,如果检测到载体身份标识不是浏览器,则是不正常请求(基于爬虫),服务器端可能拒绝该次请求
if __name__ == "__main__":  # 程序入口
    # UA伪装
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
    }  # 将载体的身份标识伪装成浏览器
    # 指定url
    url = "https://www.sogou.com/web"
    kw = input("enter a word:")
    param = {
        "query": kw
    }
    # 对指定的url发起请求,对应的url是携带参数的,并且在请求过程中处理了参数(动态拼接参数)
    response = requests.get(url=url, params=param, headers=headers)  #param可以是字典、列表、元组等
    page_text = response.text  # 获取响应数据 是json类型可以使用json()
    filename = kw+".html"
    # 持久化保存数据
    with open(filename, "w", encoding="utf-8") as fp:
        fp.write(page_text)
        print("{}保存完成!".format(filename))
    # over!

下面是破解百度翻译

代码语言:javascript
代码运行次数:0
复制
import requests
import json

if __name__ == '__main__':
    # 1.指定url
    # 此处有Ajax请求,Ajax: 能够刷新指定的页面区域,而不是刷新整个页面,
    post_url = "https://fanyi.baidu.com/sug"  # 筛选XHR
    # 2.UA伪装
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
    }
    # 3.post请求参数处理(和get是一致的)
    word = input("please enter a word:")
    # 此处输入要查询的单词
    data = {
        "kw": word
    }
    # 4.请求发送
    response = requests.post(post_url, data=data, headers=headers)
    # 5.获取响应数据(确认响应数据是json类型的才可以使用json())
    dict_obj = response.json()
    # 6.持久化存储
    with open("./{}.json".format(word), "w", encoding="utf-8") as fp:
        json.dump(dict_obj, fp=fp, ensure_ascii=False)
    print("{}.html文件保存完成".format(word))

下面是爬取药监局各个企业的相关数据

代码语言:javascript
代码运行次数:0
复制
import requests
import json
import time
if __name__ == "__main__":
    url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
    }
    id_list = []
    all_data = []
    for page in range(1,3):  # 爬取1-3页的内容
        time.sleep(2)  # 防止请求过快
        page = str(page)
        data = {
            "on": "true",
            "page": page,
            "pageSize": "15",
            "productName": "",
            "conditionType": "1",
            "applyname": "",

        }
        response = requests.post(url=url, data=data, headers=headers).json()
       # 获取各个企业的ID
        for dic in response["list"]:
            id_list.append(dic["ID"])

    # 获取企业详细数据
    post_url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
    # 可见不同企业的页面url都相同,唯一的不同是id,
    # 所以我们获取每个企业的id,通过for循环来爬取各个企业数据
    
    for id in id_list:
        time.sleep(2)
        data = {
            "id": id
        }
        id_json = requests.post(url=post_url, data=data, headers=headers).json()
        all_data.append(id_json)
    # 持久化存储
    filename = "all_data.json"
    with open(filename, "w", encoding="utf-8") as fp:
        json.dump(all_data, fp, ensure_ascii=False)
        print("over.")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 睡不着所以学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档