2024-08-23



import requests
 
# 发送HTTP GET请求
def fetch_website_data(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        return "Error: Server returned HTTP status code {}".format(response.status_code)
 
# 主函数
def main():
    url = "https://www.example.com"  # 替换为你想爬取的网站
    print(fetch_website_data(url))
 
# 如果这个脚本被直接运行,则执行main函数
if __name__ == "__main__":
    main()

这段代码使用了requests库来发送HTTP GET请求,获取网页内容。函数fetch_website_data负责发送请求并处理响应,主函数main则简单地调用这个函数并打印结果。如果你想要爬取的网站是"https://www.example.com",只需要将这个URL替换为你想要爬取的网站即可。

2024-08-23



import requests
from bs4 import BeautifulSoup
 
# 获取网页内容的函数
def get_html_content(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return "页面无法访问"
    except requests.exceptions.RequestException:
        return "请求出错"
 
# 解析网页并提取信息的函数
def parse_html_info(html_content):
    soup = BeautifulSoup(html_content, 'html.parser')
    title = soup.find('h1', class_='post-title').get_text()
    content = soup.find('div', class_='post-content').get_text()
    author = soup.find('p', class_='post-meta-author').get_text()
    return title, content, author
 
# 主函数
def main():
    url = 'http://example.com/some-post'  # 替换为你要爬取的网页URL
    html_content = get_html_content(url)
    title, content, author = parse_html_info(html_content)
    print(f"标题: {title}")
    print(f"内容: {content}")
    print(f"作者: {author}")
 
if __name__ == '__main__':
    main()

这段代码展示了如何使用Python的requests库和BeautifulSoup库来简单地抓取一个网页的内容,并提取出其中的标题、内容和作者信息。在实际应用中,你需要根据目标网页的结构来修改解析代码,以确保正确提取信息。

2024-08-23



import requests
from bs4 import BeautifulSoup
 
class SimpleCrawler:
    def __init__(self, seed_url):
        self.url_queue = [seed_url]
        self.seen_urls = set()
 
    def get_page(self, url):
        try:
            response = requests.get(url)
            if response.status_code == 200:
                return response.text
        except requests.exceptions.RequestException:
            return None
 
    def parse_page(self, url, html_content):
        soup = BeautifulSoup(html_content, 'html.parser')
        for link in soup.find_all('a'):
            new_url = link.get('href')
            if new_url and new_url.startswith('http://') and new_url not in self.seen_urls:
                self.url_queue.append(new_url)
                self.seen_urls.add(new_url)
 
    def crawl(self):
        while self.url_queue:
            url = self.url_queue.pop()
            print(f'Crawling: {url}')
            html_content = self.get_page(url)
            if html_content:
                self.parse_page(url, html_content)
 
if __name__ == '__main__':
    crawler = SimpleCrawler('http://example.com')
    crawler.crawl()

这个简易的爬虫会从给定的种子URL开始,通过requests.get函数获取页面内容,并使用BeautifulSoup解析页面中的链接。每解析一个页面,它都会检查该页面中的所有链接,添加新的URL到队列中,并跟踪哪些URL已经被访问过,以防止无限循环和重复爬取。这个简单的爬虫示例展示了如何使用Python进行网络爬取,并且是学习进行网络爬虫开发的基础。

2024-08-23

以下是一个使用Python的requests库来爬取大厂面经数据的简单示例。此示例假设目标网站的数据结构相对稳定,且不需要进行复杂的登录验证。




import requests
import json
 
# 目标网站URL
url = 'https://www.example.com/api/jobs'  # 替换为实际的API URL
 
# 发送HTTP GET请求
response = requests.get(url)
 
# 检查请求是否成功
if response.status_code == 200:
    # 解析JSON数据
    jobs_data = json.loads(response.text)
    
    # 遍历面经数据
    for job in jobs_data:
        print(f"Title: {job['title']}")
        print(f"Company: {job['company']}")
        print(f"Description: {job['description']}")
        # 这里可以添加更多的字段或者进行数据的持久化存储
else:
    print("请求失败")
 
# 注意:以上代码只是一个简单的示例,实际应用时需要处理更多的异常情况,如网络异常、API限制、数据解析错误等。

这段代码首先导入了requests和json模块,然后定义了目标网站的URL。通过requests.get()方法发送HTTP GET请求,并检查请求是否成功。如果成功,它会解析JSON数据并遍历每条面经数据,打印出标题、公司和描述。

请注意,由于实际的API可能有不同的认证方式、限流策略或数据结构,因此实际应用时需要进行适当的调整。

2024-08-23



from urllib.request import urlopen
from bs4 import BeautifulSoup
 
# 获取网页内容
def get_html(url):
    try:
        response = urlopen(url)
        return response.read()
    except Exception as e:
        print(f"An error occurred: {e}")
        return None
 
# 解析网页并提取信息
def parse_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    title = soup.find('title')
    return title.text if title else None
 
# 主函数
def main():
    url = 'https://www.example.com'  # 替换为你想爬取的网页URL
    html = get_html(url)
    if html:
        title = parse_html(html)
        print(title)
    else:
        print("Failed to retrieve HTML")
 
if __name__ == "__main__":
    main()

这段代码展示了如何使用Python的urllib库和BeautifulSoup库来获取网页内容并解析提取标题。需要替换https://www.example.com为你想要爬取的具体网页。

2024-08-23

由于原书籍中的代码已经非常简洁和优化,下面提供的是一个关于如何优化爬虫的核心函数示例,展示了如何使用requests库和BeautifulSoup进行网页请求和解析,并采用了异常处理和多线程/多进程优化:




import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
 
def get_url_content(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
    except requests.RequestException:
        return "Error: Network problem"
 
def parse_html(html_content):
    soup = BeautifulSoup(html_content, 'html.parser')
    return soup.title.string
 
def crawl_single_page(url):
    html_content = get_url_content(url)
    page_title = parse_html(html_content)
    print(f"Page title of {url}: {page_title}")
 
def crawl_pages(urls, use_threads=False, use_processes=False):
    if use_threads:
        executor = ThreadPoolExecutor(max_workers=5)
    elif use_processes:
        executor = ProcessPoolExecutor(max_workers=5)
    else:
        executor = ThreadPoolExecutor(max_workers=5)  # 默认使用线程
 
    with executor as executor:
        executor.map(crawl_single_page, urls)
 
# 示例使用
urls = ['http://example.com/', 'http://example.org/', 'http://example.net/']
crawl_pages(urls, use_threads=True)  # 使用线程池

这段代码展示了如何使用requests库获取网页内容,如何使用BeautifulSoup解析HTML,以及如何使用ThreadPoolExecutor来实现多线程爬取。通过参数use_threadsuse_processes可以选择是否使用多线程或多进程。这个示例简洁明了,并且包含了错误处理和多任务处理,是一个合格的爬虫入门教程。

2024-08-23



import requests
from bs4 import BeautifulSoup
 
class SimpleCrawler:
    def __init__(self, start_url):
        self.start_url = start_url
 
    def fetch_url(self, url):
        """
        发送HTTP请求并获取页面内容
        """
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return None
 
    def parse_content(self, content, parser='html.parser'):
        """
        使用BeautifulSoup解析页面内容
        """
        soup = BeautifulSoup(content, parser)
        return soup
 
    def extract_links(self, soup):
        """
        提取页面中的链接
        """
        return [link['href'] for link in soup.find_all('a', href=True)]
 
    def start_crawling(self):
        """
        开始爬取过程
        """
        # 初始URL
        url = self.start_url
 
        # 获取页面内容
        content = self.fetch_url(url)
        if content is None:
            print("页面获取失败")
            return
 
        # 解析页面内容
        soup = self.parse_content(content)
 
        # 提取链接并输出
        for link in self.extract_links(soup):
            print(link)
 
# 使用示例
crawler = SimpleCrawler('https://www.example.com')
crawler.start_crawling()

这段代码定义了一个简单的网络爬虫框架,包括获取页面内容、解析页面和提取链接。开发者可以基于这个框架进一步扩展功能,如实现深度优先或广度优先的爬取策略、处理动态内容、应对反爬机制等。

2024-08-23

下面是一个简单的Python爬虫示例,用于下载网页上的图片。




import requests
from bs4 import BeautifulSoup
import os
 
# 图片保存目录
save_dir = 'images'
if not os.path.exists(save_dir):
    os.makedirs(save_dir)
 
# 目标网页URL
url = 'http://example.com'
 
# 发送HTTP请求
response = requests.get(url)
 
# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
 
# 找到所有的img标签
for img in soup.find_all('img'):
    # 获取图片的URL
    img_url = img.get('src')
    
    # 如果是相对路径,拼接成完整的URL
    if not img_url.startswith(('http:', 'https:')):
        img_url = response.urljoin(img_url)
    
    # 下载图片
    response = requests.get(img_url)
    img_data = response.content
    
    # 提取图片文件名
    filename = os.path.basename(img_url)
    
    # 保存图片到本地
    with open(os.path.join(save_dir, filename), 'wb') as f:
        f.write(img_data)
 
print("图片爬取完成,保存在", save_dir)

这段代码使用了requests库来发送HTTP请求,BeautifulSoup来解析HTML,以及os来处理文件操作。代码会下载指定网页上的所有图片,并将它们保存到本地的images文件夹中。这个例子展示了如何使用Python进行基本的网络爬取和文件操作。

2024-08-23



import requests
 
def fetch_web_data(url):
    """
    使用 Requests 库获取网页数据的简单函数
    :param url: 目标网页的 URL
    :return: 网页内容的字符串形式
    """
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        else:
            return "网页获取失败,状态码: {}".format(response.status_code)
    except requests.exceptions.RequestException:
        return "请求出错,网络问题或URL无效"
 
# 示例使用
url = "https://www.example.com"
data = fetch_web_data(url)
print(data)

这段代码定义了一个名为fetch_web_data的函数,它接受一个URL作为参数,使用requests.get方法来发送HTTP GET请求,并返回请求的响应内容。如果请求成功,它将返回网页的文本内容;如果请求失败,它将返回错误信息。此外,它还包含了异常处理,以便在遇到网络问题或无效的URL时提供更友好的错误信息。

2024-08-23

在Python中,使用requests库进行网络爬虫时,可以通过设置headers参数来伪装为一个真实的浏览器。这样可以避免被服务器识别为爬虫而被封禁。

以下是一个示例代码,展示了如何使用requests库设置headers参数:




import requests
 
# 创建一个请求头部
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
}
 
# 使用请求头部进行网络爬取
url = 'http://example.com'
response = requests.get(url, headers=headers)
 
# 输出网页内容
print(response.text)

在这个例子中,我们创建了一个包含常见浏览器头部信息的字典,然后在requests.get()方法中通过headers参数使用它。这样,我们的爬虫就可以伪装成一个常见的浏览器去请求网页内容了。