2024-08-12



import redis
import requests
from lxml import etree
 
# 连接Redis数据库
redis_conn = redis.StrictRedis(host='localhost', port=6379, db=0)
 
def get_page_source(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
    except requests.RequestException:
        return None
 
def parse_page(html):
    tree = etree.HTML(html)
    news_items = tree.xpath('//div[@class="news-list"]/ul/li')
    for item in news_items:
        title = item.xpath('.//a/@title')[0]
        href = item.xpath('.//a/@href')[0]
        yield {
            'title': title,
            'href': href
        }
 
def save_to_redis(data):
    pipe = redis_conn.pipeline()
    for item in data:
        pipe.sadd('gushi_news:items', item['href'])
    pipe.execute()
 
def main():
    url = 'https://www.guge.name/news/'
    html = get_page_source(url)
    if html:
        for item in parse_page(html):
            print(item)
        save_to_redis(list(parse_page(html)))
 
if __name__ == '__main__':
    main()

这段代码首先定义了连接Redis数据库的函数,然后定义了获取页面源码、解析页面源码、保存数据到Redis的函数。在main函数中,它首先获取了网页的源码,然后解析出新闻标题和链接,并打印出来。最后,它将解析出的每条新闻数据保存到Redis的集合类型数据结构中,以此来实现去重存储的功能。

2024-08-12

BeautifulSoup是一个Python库,用于从HTML或XML文件中提取数据。以下是一个使用BeautifulSoup库的简单示例,该示例从一个网页下载HTML内容,并使用BeautifulSoup解析该内容以提取数据。

首先,你需要安装BeautifulSoup库,如果还没有安装,可以使用pip安装:




pip install beautifulsoup4

然后,你可以使用以下代码来提取网页数据:




import requests
from bs4 import BeautifulSoup
 
# 下载网页
url = 'http://example.com'
response = requests.get(url)
 
# 检查网页是否成功下载
if response.status_code == 200:
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 提取数据
    # 例如,提取标题
    title = soup.title.text
    print(title)
    
    # 提取所有的段落
    paragraphs = soup.find_all('p')
    for p in paragraphs:
        print(p.text)
else:
    print("Failed to download the webpage")

这段代码首先使用requests库下载了一个网页,然后使用BeautifulSoup库解析HTML内容,并提取了标题和所有段落文字。你可以根据需要提取其他数据,例如提取所有的链接、图片或表格等。

2024-08-12

在易语言中实现一个简单的网页爬虫来提取静态网页中的信息,可以使用“内置文本解析”功能。以下是一个简单的示例代码:




.版本 3
.局部变量 网页文本, 文本型
.局部变量 解析器, 文本解析器
.局部变量 节点列表, 节点集合
.局部变量 节点, 节点
.局部变量 文本内容, 文本型
.局部变量 URL, 文本型
 
URL = “http://example.com” ' 替换为你要爬取的网页地址
网页文本 = 读入文本 (URL, #GBK) ' 使用GBK编码读取网页内容
创建文本解析器 (解析器, #HTML, 网页文本)
解析器.获取所有节点 (节点列表, “div”) ' 假设我们要提取的信息在div标签中,这里改为相应的标签
 
循环首 (节点列表.计数 (), 节点)
    文本内容 = 节点.内容 () ' 获取节点内容
    输出 (文本内容) ' 输出节点内容
    节点.销毁 () ' 释放节点资源
循环尾 ()
 
解析器.销毁 () ' 释放解析器资源

这段代码创建了一个文本解析器,解析了给定的HTML文档,并获取了所有<div>标签的节点集合。然后遍历这些节点,输出它们的内容。这个例子是一个基本的开始,实际应用中可能需要根据具体网页结构进行调整。

2024-08-12



import requests
from bs4 import BeautifulSoup
 
# 爬取网页的函数
def crawl_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        return None
 
# 解析网页并提取信息的函数
def parse_soup(soup):
    title = soup.find('h1', class_='post-title').get_text()
    content = soup.find('div', class_='post-content').get_text()
    return title, content
 
# 主函数,组装URL并调用爬取和解析函数
def main(url):
    html = crawl_page(url)
    if html:
        soup = BeautifulSoup(html, 'html.parser')
        title, content = parse_soup(soup)
        print(f"标题: {title}")
        print(f"内容: {content}")
    else:
        print("网页爬取失败")
 
# 示例URL
example_url = 'https://www.example.com/some-post'
 
# 运行主函数
main(example_url)

这段代码使用了requests库来爬取网页,使用BeautifulSoup库来解析HTML,并提取了一个假设的博客文章页面的标题和内容。这个例子简单且直接,适合作为教学使用。

2024-08-12



import requests
from bs4 import BeautifulSoup
 
# 设置代理服务器
proxies = {
    'http': 'http://user:password@proxy.server.com:port',
    'https': 'https://user:password@proxy.server.com:port'
}
 
# 发送请求
url = 'http://example.com'
response = requests.get(url, proxies=proxies)
 
# 检查请求是否成功
if response.status_code == 200:
    # 使用BeautifulSoup解析HTML内容
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 提取页面标题
    title = soup.title.text
    print(title)
    
    # 查找所有的段落
    paragraphs = soup.find_all('p')
    for p in paragraphs:
        print(p.text)
else:
    print('请求失败,状态码:', response.status_code)

这段代码使用了requests库来发送一个HTTP GET请求,并使用BeautifulSoup来解析返回的HTML内容。它还演示了如何设置代理服务器,以及如何检查请求是否成功,并处理了请求失败的情况。这是学习如何使用Beautiful Soup进行Web爬虫的一个很好的速成指南。

2024-08-12

要爬取豆瓣上的数据,你可以使用Python的requests和BeautifulSoup库。以下是一个简单的示例,展示了如何爬取豆瓣电影TOP250的电影信息。

首先,安装所需库(如果尚未安装的话):




pip install requests
pip install beautifulsoup4

然后,使用以下代码爬取数据:




import requests
from bs4 import BeautifulSoup
import csv
 
# 定义要爬取的豆瓣电影TOP250页面的URL
def get_page_source(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except requests.RequestException:
        return None
 
# 解析页面并提取电影信息
def parse_page(html):
    soup = BeautifulSoup(html, 'html.parser')
    movie_list = soup.find_all('div', class_='info')
    for movie in movie_list:
        rank = movie.find('em').get_text()
        title = movie.find('span', class_='title').get_text()
        rating = movie.find('span', class_='rating_num').get_text()
        yield {
            'rank': rank,
            'title': title,
            'rating': rating
        }
 
# 保存数据到CSV文件
def save_to_csv(data):
    with open('douban_movies.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=['rank', 'title', 'rating'])
        writer.writeheader()
        for item in data:
            writer.writerow(item)
 
# 主函数
def main():
    base_url = 'https://movie.douban.com/top250?start='
    urls = [base_url + str(i * 25) for i in range(10)]  # 假设总共有10页
    movie_data = []
 
    for url in urls:
        html = get_page_source(url)
        if html:
            movie_data.extend(parse_page(html))
 
    save_to_csv(movie_data)
 
if __name__ == '__main__':
    main()

这段代码会生成一个名为douban_movies.csv的CSV文件,其中包含了电影的排名、名称和评分。

注意:

  1. 爬取数据时应遵守豆瓣的robots.txt协议,并尊重网站的爬取政策。
  2. 实际爬取过程中可能需要处理登录、反爬虫机制等问题,可能需要使用代理、Session对象、设置User-Agent等。
  3. 爬取数据应尊重网站版权和隐私,不得用于商业目的以外的非法活动。
2024-08-12



from datetime import datetime
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Document, Date, Nested, Boolean, Text, Keyword, Integer, Float, connections
 
# 连接到Elasticsearch
connections.create_connection(hosts=['localhost:9200'])
 
class Product(Document):
    name = Text(fields={'raw': Keyword()})
    price = Float()
    in_stock = Boolean()
    timestamp = Date()
    class Index:
        name = 'products'
        using = 'products_index'
 
# 创建一个新的Product文档
product = Product(
    name='Example Product',
    price=99.99,
    in_stock=True,
    timestamp=datetime.now()
)
 
# 保存文档到Elasticsearch
product.save()
 
# 搜索所有产品
for hit in Product.search().query('match_all'):
    print(hit.name, hit.price)

这段代码展示了如何使用Elasticsearch Python API创建一个简单的产品索引,并对其进行搜索。它首先连接到Elasticsearch实例,然后定义了一个Product文档类,并提供了一个示例来创建一个新的产品文档并将其保存到索引中。最后,它演示了如何执行一个简单的匹配所有文档的搜索。

2024-08-12



import asyncio
import aiohttp
 
async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()
 
async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, 'http://httpbin.org/headers')
        print(html)
 
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

这段代码使用了asyncio和aiohttp库来编写一个简单的异步HTTP客户端。fetch函数负责发送HTTP请求并获取响应文本,而main函数则使用异步上下文管理器async with来管理ClientSession,并调用fetch函数获取网页内容。最后,使用异步事件循环asyncio.get_event_loop()运行main函数。这是Python异步协程编程的一个基本示例。

2024-08-12



import requests
from requests_html import HTMLSession
 
# 创建一个HTMLSession对象,以便使用它来发送请求
session = HTMLSession()
 
# 指定要抓取的URL
url = 'https://example.com'
 
# 使用get方法发送请求
response = session.get(url)
 
# 解析并提取HTML内容
response.html.render()  # 渲染页面,如果需要JavaScript渲染的内容
 
# 提取所需数据
# 例如,提取页面的标题
title = response.html.find('title', first=True)
print(title.text)
 
# 关闭session,释放资源
session.close()

这段代码演示了如何使用requests-html库来发送网络请求,并提取页面的标题。在实际应用中,你可以根据需要提取页面上的其他数据,如链接、图片、文本等。

2024-08-12



import requests
from bs4 import BeautifulSoup
 
# 目标网页URL
url = 'https://www.example.com'
 
# 发送HTTP请求
response = requests.get(url)
 
# 检查请求是否成功
if response.status_code == 200:
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 提取标题
    title = soup.title.text
    print(f'网页标题: {title}')
    
    # 提取所有段落文本
    paragraphs = soup.find_all('p')
    for p in paragraphs:
        print(p.text)
else:
    print('网页请求失败')

这段代码使用了requests库来发送HTTP GET请求,获取网页内容,然后使用BeautifulSoup库来解析HTML并提取数据。代码首先检查请求是否成功,如果成功,它会打印网页标题和所有段落文本。如果请求失败,它会输出错误消息。这是一个简单的网页爬取示例,适合作为学习爬虫的入门教程。