0

I have the following for loop:

    for titles in titles:
        title = titles.xpath("a/text()").extract()
        link = titles.xpath("a/@href").extract()
        print(title, link)

How can I dump the title and link into a formmated .csv file?

2
  • I am pretty sure that this a well-hashed out issue that you can Google pretty much as you typed it. Commented Oct 4, 2016 at 16:25
  • I tried several things, even with numpy and pandas... Commented Oct 4, 2016 at 16:32

4 Answers 4

3

You should use the python CSV module. Look here for more information: Writing List of Strings to Excel CSV File in Python.

Here is an example for your problem:

import csv
results = []

# your code... also add this to your for loop.
    results.append([title, link])

csv_file = open("csv_file.csv",'wb')
wr = csv.writer(csv_file)
for row in results:
    wr.writerow(row)
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks for the help preston!... when I tried this approach the csv file is blank... I got the following exception:File "/Users/user/PycharmProjects/scrapy_tests/ttest/spiders/test.py", line 28, in parse wr.writerow(row) TypeError: a bytes-like object is required, not 'str
Change 'wb' to 'w', can't see why you opened in binary mode.
You can use either I think, the examples I found used binary writing so that's what I used.
2

Something like this (documentation):

...
doc_path = "path/to/doc.csv" # must exist, first folder on the place
                             # where you are running the script!
with open(doc_path, 'a') as doc:
    for entry in titles:
        title = entry.xpath("a/text()").extract()
        link  = entry.xpath("a/@href").extract()
        print(title, link)
        doc.write(str(title)+','+str(link)+'\n')

2 Comments

Thanks berna!... what about something with pandas?
You could use something like pandas.DataFrame.to_csv, but even people using pandas use traditional write (example).
1

Use a csv writer.

Basic usage:

import csv
with open('file.csv') as f:
    writer = csv.writer(f)
    writer.writerow(["title", "link"])

Comments

1
result = []
for titles in titles:
    title = titles.xpath("a/text()").extract()
    link = titles.xpath("a/@href").extract()
    print(title, link)
    result += [title + ',' + link + '\n']

with open("result.csv" "w+") as f:
    f.writelines(result)

1 Comment

Thanks!... I got this exception: ` line 24, in parse result += [title + ',' + link + '\n'] TypeError: can only concatenate list (not "str") to list`

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.