爬虫从入门到精通(第一讲新手小白必看)

一、引言

        爬虫技术是指利用程序自动获取互联网上的信息的一种技术。通常,爬虫会按照预先设定的规则,自动地访问网页、抓取数据,并将数据保存下来以供后续分析或其他用途。爬虫技术在网络搜索引擎、数据挖掘、信息监测等领域得到广泛应用。

二、如何工作?

  1. 请求网页:爬虫首先会向目标网站发送HTTP请求,请求特定的页面。
  2. 获取内容:一旦接收到响应,爬虫会解析HTML页面,并提取其中的信息,如文本、图片、链接等。
  3. 处理数据:爬虫会对获取的数据进行处理和存储,可能包括数据清洗、结构化等操作。
  4. 遍历链接:爬虫可能会根据设定的规则,继续访问页面上的链接,形成一个链式抓取的过程。

三、主要应用领域

  1. 搜索引擎:搜索引擎通过爬虫技术从互联网上抓取网页,并建立索引,以便用户查询时快速检索相关信息。
  2. 数据挖掘:爬虫可以用来从网页中提取结构化数据,进行分析和挖掘,发现有用的信息或模式。
  3. 监测与分析:企业可以利用爬虫技术监测竞争对手的动态、舆情信息等,进行市场分析和竞争情报搜集。
  4. 内容聚合:爬虫可以从多个网站抓取相关内容,进行聚合展示,为用户提供更丰富的信息资源。

四、技术挑战与伦理问题

  1. 反爬虫技术:为防止数据被未经授权的爬虫获取,网站可能会采取反爬虫技术,如验证码、IP封禁等。
  2. 数据隐私:爬虫获取的数据可能涉及用户隐私,因此在数据采集和使用过程中需要考虑数据隐私保护的问题。
  3. 数据质量:网页结构的多样性和变化性可能导致爬虫获取的数据质量参差不齐,需要进行数据清洗和验证。 爬虫技术的发展和应用对于信息获取、数据分析和业务决策等方面都具有重要意义,但在使用过程中需要注意合法合规,避免侵犯他人权益和违反相关法律法规。

五、简单实战

        我们以爬取某小说网站的例子开始讲解,如下图所示:

        

        从这幅图我们可以清楚的看出小说的各种分类,爬虫其实说白了就是模仿人为的操作对数据进行收集,只不过是解放了人类的双手和精力,下面上代码。

'''
import pandas as pd
import requests
from lxml import etree
# 发送HTTP请求获取页面内容
def fetch_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    return None
# 使用xpath提取页面数据
def parse_page(html):
    tree = etree.HTML(html)
    # 在这里使用xpath表达式提取需要的内容
    # 这里以提取页面中的标题和链接为例
    name = tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/h1/a/text()')
    jibie=tree.xpath('//*[@id="bookInfo"]/dd/div[2]/table/tbody/tr[1]/td[1]/span/text()')
    object=tree.xpath('//*[@id="bookInfo"]/dd/div[2]/table/tbody/tr[1]/td[2]/a/text()')
    zhou=tree.xpath('//*[@id="weekclickCount"]')
    yue=tree.xpath('//*[@id="monthclickCount"]')
    zhoug=tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/dl/dd/div[2]/table/tbody/tr[3]/td[1]')
    yueg=tree.xpath('//*[@id="hb_month"]')
    zhout=tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/dl/dd/div[2]/table/tbody/tr[4]/td[1]')
    yuet=tree.xpath('//*[@id="flower_month"]')
    readpeople=tree.xpath('//*[@id="howmuchreadBook"]')
    numbers=tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/div[2]/p[2]/em')
    line=tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/div[2]/p[3]/em')
    return name,jibie
# 主函数
def main():
    urls = pd.read_csv('17k小说url.csv')  # 替换为你的CSV文件路径和名称
    urls = urls['url']
    results = {'name': [], 'line': []}  # 用于保存提取到的字段结果
    for url in urls:
        html = fetch_page(url)  # 获取页面内容
        if html:
            name, line = parse_page(html)  # 解析页面数据
            results['name'].extend(name)  # 将提取到的标题添加到结果列表里
            results['line'].extend(line)  # 将提取到的链接添加到结果列表里
    # 将结果保存到CSV文件
    df = pd.DataFrame(results)
    df.to_csv('17k小说.csv', index=False)  # 替换为你想要保存结果的CSV文件路径和名称
if __name__ == '__main__':
    main()
'''''
import pandas as pd
import requests
from lxml import etree
# 发送HTTP请求获取页面内容
def fetch_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    return None
# 使用xpath提取页面数据
def parse_page(html):
    tree = etree.HTML(html)
    # 在这里使用xpath表达式提取需要的内容
    name = tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/h1/a/text()')
    jibie = tree.xpath('//*[@id="bookInfo"]/dd/div[2]/table/tbody/tr[1]/td[1]/span/text()')
    object = tree.xpath('//*[@id="bookInfo"]/dd/div[2]/table/tbody/tr[1]/td[2]/a/text()')
    zhou = tree.xpath('//*[@id="weekclickCount"]/text()')
    yue = tree.xpath('//*[@id="monthclickCount"]/text()')
    zhoug = tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/dl/dd/div[2]/table/tbody/tr[3]/td[1]/text()')
    yueg = tree.xpath('//*[@id="hb_month"]/text()')
    zhout = tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/dl/dd/div[2]/table/tbody/tr[4]/td[1]/text()')
    yuet = tree.xpath('//*[@id="flower_month"]/text()')
    readpeople = tree.xpath('//*[@id="howmuchreadBook"]/text()')
    numbers = tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/div[2]/p[2]/em/text()')
    line = tree.xpath('/html/body/div[5]/div[1]/div[1]/div[2]/div[2]/p[3]/em/text()')
    return name, jibie, object, zhou, yue, zhoug, yueg, zhout, yuet, readpeople, numbers, line
# 主函数
def main():
    urls = pd.read_csv('17k小说url.csv')  # 替换为你的CSV文件路径和名称
    urls = urls['url']
    results = {'name': [],
               'jibie': [],
               'object': [],
               'zhou': [],
               'yue': [],
               'zhoug': [],
               'yueg': [],
               'zhout': [],
               'yuet': [],
               'readpeople': [],
               'numbers': [],
               'line': []}  # 用于保存提取到的字段结果
    for url in urls:
        html = fetch_page(url)  # 获取页面内容
        if html:
            name, jibie, object, zhou, yue, zhoug, yueg, zhout, yuet, readpeople, numbers, line = parse_page(html)  # 解析页面数据
            results['name'].extend(name)
            results['jibie'].extend(jibie)
            results['object'].extend(object)
            results['zhou'].extend(zhou)
            results['yue'].extend(yue)
            results['zhoug'].extend(zhoug)
            results['yueg'].extend(yueg)
            results['zhout'].extend(zhout)
            results['yuet'].extend(yuet)
            results['readpeople'].extend(readpeople)
            results['numbers'].extend(numbers)
            results['line'].extend(line)
    # 将结果保存到CSV文件
    df = pd.DataFrame(results)
    df.to_csv('17k小说.csv', index=False)  # 替换为你想要保存结果的CSV文件路径和名称
if __name__ == '__main__':
    main()

        需要原数据的可以呼我。

六、IP池推荐

        如果有大量数据需要爬去的小伙伴们推荐可以用这个,性能稳定,前期还可以免费试用。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司空良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值