摸索式自学爬虫过程(一)

楔子:这是一种缺啥补啥的叙述方式.........电脑用的是windows........

首先,搜到了相关静态页面的爬虫代码,第一步import:

import requests
from bs4 import BeautifulSoup

输入后提示无法从源解析导入'requests' / 'bs4':

9a9730c45c8e4e32a5a20effc8ec3b0f.png

 那么就要安装requests和bs4,

pip install requests
pip install bs4

发现报错:

ca5b29a0c377497ab4b17be8cbbcd060.png

百度了一下,是需要添加环境:

把pip所在文件夹的路径,一般为: '...\AppData\Local\Programs\Python\Python39\Scripts'(不是的话也可以自己在文件夹搜索pip/python找找看)

添加到: 控制面板->系统和安全->系统->高级系统设置->环境变量->新建->输入路径(安装python的时候有个pip的选项要选的啊....)

96754c8f0d894c41af5d611fbcf27a98.png

之后再次在终端安装 pip install requests / bs4,跳出选项:

你可能已将 Python 包安装到全局环境中,这可能会导致包版本之间发生冲突。是否要创建包含这些包的虚拟环境来隔离依赖项?

选择是后,在原文件下自动生成了.venv文件夹,如图:

bb35cd3f249447e9bbc3ae3674eb22db.png

好了,开始爬起来:

import requests
from bs4 import BeautifulSoup

url = '要访问/爬页面的url'
headers = { 'user_agents': '如图所示拿到user_agents' }
strHtml = requests.get(url, headers = headers)  # Get方式获取网页数据
soup = BeautifulSoup(strHtml.text, 'lxml')
info = soup.select('如下文所示拿到筛选所需路径')  # 筛选数据

1047ec0bb1824adebe80e82b9f2a00c0.png

info = soup.select('')  这里需要在元素里找到目标元素的位置,右击->轻触复制->复制selector

复制这里有不同的选择,本篇选择的是复制selector(目前浅看下来,也有用到Xpath的,但貌似BeautifulSoup()这里会有不同,还不确定,后续确定了再修改)

for item in info:
    input = item.get_text()

题外话:这里input拿到后打印,发现有一个数据没获取到,具体是:

<tr>
    <td>内容</td>
    <td>
        <a>要爬的文本内容</a>
        <a>要爬的文本内容</a>
        <a>要爬的文本内容</a>
        <a>要爬的文本内容</a>
    </td>
</tr>

这里a标签里的文本没有获取到

后面尝试了在info = soup.select(' ') 里写入具体到这个a标签的selector,爬出来是空

索性直接info = soup.selet('a') ,得到了这个页面里除了这个td里的a标签之外的其他全部a标签文本(排除方法问题)

又在 控制台-网络-响应 查看了很久,估摸着这部分应该是动态加载的,解决方案有二:

一、直接爬它相关的请求(数据太多没耐心了没找到)

二、使用支持JavaScript动态渲染的库,后面继续研究~

---------------------------------------------------------------------------------------------------------------------------------

求助大佬,说是可以直接拿全部的数据,在script里面找到这个a标签对应的数据,然后正则匹配出来,具体代码如下:

import re

strHtml = requests.get(url, headers = headers)  # url和headers请参照上文

pattern = r'' # ''里是筛选a标签数据的正则
match = re.search(pattern, strHtml.text) # re 匹配 JavaScript 代码中 a标签文本对应的变量的赋值语句
if match:
    data = match.group(1) # data接收
else:
    print("can not found in JavaScript code.")

试了试真的取到了(引发疑问:为啥这样又能拿到呢?不都是静态方法吗?还是说之前selector的时候只取html部分的数据?这个是不是就是上述解决方法一?)

方法二还是想试试,等待研究~

最后想说,这个不是只针对a标签哈,只是我自己爬不出来的这部分刚好是a标签下的文本

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值